我读过几篇文章,讨论了为什么急切加载使用多个查询而不是连接
here
,
here
和
here
然而,我有一种情况,我认为应该使用联接而不是急切加载。我将如何构造查询,以便能够访问子对象,就好像它是一个通常急切加载的对象一样?
示例:获取住在某条街道上的人,并同时加载该地址。我不想加载所有人的地址,因为他住在很多地方;仅匹配查询的位置。在急切加载和whereHas的情况下,我必须复制查询,而且查询并不总是这么简单:
People::with(['address', function($query) use ($street_name){
return $query->where('street_name', $street_name);
}])->whereHas('address', function($query) use ($street_name){
return $query->where('street_name', $street_name);
})->get();
可以是
People::query()->join('address', function($join){
$join->on(...)
})->where('street_name', $street_name);
问题是我不能使用这个:
$person->address
是否有一种方法来加入并按摩它(使用选择?)所以它看起来像是迫不及待地加载的?