Php 在雄辩模型中使用特征时始终渴望负荷关系
我为我的任何一个雄辩的模型提供了一个Php 在雄辩模型中使用特征时始终渴望负荷关系,php,laravel,laravel-5,traits,laravel-eloquent,Php,Laravel,Laravel 5,Traits,Laravel Eloquent,我为我的任何一个雄辩的模型提供了一个hasstranslation-特征。所有使用此特性的模型都将收到如下一对多关系(您可以看到我的基本模型到模型语言的关系): 我想做的是: 始终渴望加载“hasOne”-与当前用户语言翻译的关系。因此,每当用户登录时,我的模型都应该加载类似于$model->userLanguage的内容,并且类型为ModelLang 这看起来像这样,效果很好: public function userLanguage() { $user = \Auth::user()
hasstranslation
-特征。所有使用此特性的模型都将收到如下一对多关系(您可以看到我的基本模型到模型语言的关系):
我想做的是:
始终渴望加载“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);
}
我正在努力通过包含这个特性来自动(急切地)加载所有模型的这种关系
我到目前为止所做的尝试
boothastransflation
),但在那里我没有具体的对象来调用load
或方法。在实例化的雄辩模型中,我没有找到任何钩子,我想将我的关系添加到渴望的负载中
有什么想法吗?有什么明显的地方我忽略了吗?您可以为登录的用户语言创建一个中间件
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect('/')->with('Success','You have successfully logged out');
}
$user = \Auth::user();
$language = $user->languages()->where('language_id', $user->language_id);
$request->attributes->add([
'user_language' => $language
]);
$next($request);
}
您可以在中间件之后获得这些数据,如
$request->attributes->get('user_language');
谢谢你的回答,但我想这是另一个问题的答案;)我的示例中已经有了用户的语言
$user->language\u id
。我想要的是渴望加载关系!您可以在您的trait中创建一个始终使用('userLanguage')
$request->attributes->get('user_language');