我正在为我HasTranslation
的任何雄辩模型提供 -Trait。所有使用此特征的模型都将收到这样的一对多关系(您可以在其中看到我的基本模型到 ModelLanguages 关系):
public function languages()
{
return $this->hasMany(get_class($this).'Lang', 'master_id', 'id');
}
我想做的是:
总是急切地加载与当前用户语言翻译的“hasOne”关系。所以每当用户登录时,我的模型应该有类似$model->userLanguage
被急切加载的东西,并且是ModelLang
.
这看起来像这样并且效果很好:
public function userLanguage()
{
$user = \Auth::user();
if (!$user)
{
throw new \Exception(__CLASS__.': userLanguage not available because there is no session');
}
return $this->hasOne(get_class($this).'Lang', 'master_id', 'id')->where('language_id', $user->language_id);
}
我正在努力通过仅包含此特征来自动(渴望)为所有模型加载此关系。
到目前为止我尝试过的
在 trait 中使用构造函数:可以工作,但不是好主意,因为这可能会与其他 trait 的构造函数发生冲突。基本上我会确认声明:不要在任何特征中使用构造函数。
使用您的引导特征方法(
bootHasTranslation
),但我没有要调用的具体对象load
或with
方法。我在实例化的 eloquent 模型中没有找到任何挂钩,我想在其中添加我的关系到急切的负载
有任何想法吗?我在这里忽略了什么明显的东西吗?