Laravel 对急切加载的简单约束
Laravel simple constraint on eager load
我有一个用户模型,它属于一个站点。一个站点可以有很多用户。
用户table
- id
- 名字
- 电子邮件
- .....
- company_site_id
站点table
- id
- 姓名
关系在用户中定义如下:
public function site()
{
return User::belongsTo('App\CompanySite', 'company_site_id', 'id');
}
我只想让所有用户分配到一个站点(假设站点 ID 为 1)。
$users = \App\User::with(array('site' => function($query)
{
$query->where('id', '=', 1);
}))->get();
dd(count($users));
然而,这将返回所有用户,而不管他们的站点。
您正在获得所有用户,这就是使用 ->get();
的原因。
使用whereHas
方法。这将查询您的关系,并且 return 仅查询具有您 wanting/querying 关系结果的模型;
$users = User::whereHas('site', function($q)
{
$q->where('id', '=', 1);
})->get();
因此,在这种情况下,网站 id
为 1 的用户将被 returned。
我有一个用户模型,它属于一个站点。一个站点可以有很多用户。
用户table
- id
- 名字
- 电子邮件
- .....
- company_site_id
站点table
- id
- 姓名
关系在用户中定义如下:
public function site()
{
return User::belongsTo('App\CompanySite', 'company_site_id', 'id');
}
我只想让所有用户分配到一个站点(假设站点 ID 为 1)。
$users = \App\User::with(array('site' => function($query)
{
$query->where('id', '=', 1);
}))->get();
dd(count($users));
然而,这将返回所有用户,而不管他们的站点。
您正在获得所有用户,这就是使用 ->get();
的原因。
使用whereHas
方法。这将查询您的关系,并且 return 仅查询具有您 wanting/querying 关系结果的模型;
$users = User::whereHas('site', function($q)
{
$q->where('id', '=', 1);
})->get();
因此,在这种情况下,网站 id
为 1 的用户将被 returned。