Laravel版本: 5.3
在我的用户模型类中,我有一个方法:
User::hasOneRelation('App\Client')->first();
然后我将此方法称为以下代码:
{hostname, exit_status} = System.cmd "hostname", [""]
{"TR01PPL010698\r\n", 0}
我得到了正确的值但是有任何N + 1问题.....
答案 0 :(得分:1)
没有办法急于加载这种动态关系,所以如果你试图在循环中使用这种关系,是的,你最终会遇到N + 1问题。
答案 1 :(得分:0)
你不应该在这里遇到任何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'));
}
答案 2 :(得分:-1)
是的,你只是面临N + 1问题。阅读laravel官方文档https://laravel.com/docs/5.3/eloquent-relationships#eager-loading