laravel版本: 5.3
在我的中,用户模型类我有一种方法:
public function hasOneRelation($model)
{
return $this->hasOne($model);
}
然后我称此方法为以下代码:
User::hasOneRelation('AppClient')->first();
我得到了正确的值,但是有任何n 1个问题....
无法急切地加载这种动态关系,因此,如果您尝试在循环中使用这种关系,是的,您最终会遇到n 1问题。
您在这里不应该有任何n 1个问题,因为您不会将其称为模型的属性。那只是远离在模型上循环的循环中。如果您要做:
,就会得到n 1问题。//User Model
public function contract()
{
return $this->hasOne(Contract::class);
}
//Controller
public function index()
{
$users = User::all();
return view('users.index', compact('users'));
}
//View
<ul>
@foreach($users as $user)
<li>{{$user->contract->type}}</li>
@endforeach
</ul>
将每个模型上的关系加载在循环中,而不是懒惰的加载如下:
//Controller
public function index()
{
$users = User::with('contract')->get();
return view('users.index', compact('users'));
}
是的,您只是面对n 1问题。阅读Laravel官方Doc https://laravel.com/docs/5.3/eloquent-relationships#eager-loading