Laravel 对急切加载的简单约束

Laravel simple constraint on eager load

我有一个用户模型,它属于一个站点。一个站点可以有很多用户。

用户table

站点table

关系在用户中定义如下:

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。