Php 覆盖哨兵';睡眠特征

Php 覆盖哨兵';睡眠特征,php,database,model,traits,sentinel,Php,Database,Model,Traits,Sentinel,为了在Sentinel中使用第二个数据库,所有模型都必须具有一个具有所需数据库名称的“连接”属性,否则它们将只使用默认数据库(因为它是用雄辩的ORM构建的) 目前,Sentinel不提供这种选择。无论如何,我找到了如何让它工作:在cartalyst/support/src/Traits/RepositoryTrait.php中,我编辑了createModel方法: public function createModel(array $data = []) { $class = '\\'.

为了在Sentinel中使用第二个数据库,所有模型都必须具有一个具有所需数据库名称的“连接”属性,否则它们将只使用默认数据库(因为它是用雄辩的ORM构建的)

目前,Sentinel不提供这种选择。无论如何,我找到了如何让它工作:在cartalyst/support/src/Traits/RepositoryTrait.php中,我编辑了createModel方法:

public function createModel(array $data = [])
{
    $class = '\\'.ltrim($this->model, '\\');

    $class = new $class($data);

    return $class;
}
我在返回行之前添加了以下代码行:

$class->setConnection('second_database_name');
现在,我想将此更改永久化,这样我就不必在Sentinel的下一次更新中再次更改代码,而且我想像往常一样“composer install”Sentinel,所以我需要将更改放在不同的文件夹中


对我来说,最好的方法是什么?

你可以用叉子叉它,让你的叉子与产地保持同步。您还可以保留原始源代码,编写一个小脚本,在每次更新后应用修补程序。有很多方法。答案是肯定的。尽量避免简单的“是/否”问题,因为它们往往不太“好”。@m02ph3u5我想也许还有更好的方法,因为在trait中有一个“动态地将缺少的方法传递给模型”的调用方法和一个setMethod——“模型的运行时重写”。也许我可以从我自己的文件中重新配置模型。知道吗?这是特征文件: