我已经为此查看了许多答案,我的代码正在运行,但它没有产生预期的结果 .
我有一个位置表和列表表 . 许多商家信息可以属于一个位置 .
我想要做的是获取一个特定的位置,结果应该包括所有连接的列表,除了用户正在查看的列表 . 我将 $listing_id
for传递给子查询,但问题是 $location_other_listings
仍包含该列表(在下面的示例中使用 $listing_id = 3
) .
$listing_id = 3;
$location_other_listings = Location::whereHas('listings', function ($query) use($listing_id) {
$query->where('id', '!=', $listing_id);
})
->where('id', $location_id)
->first();
Update:
我也尝试了反向( whereDoesntHave
和 =
而不是 !=
):
$listing_id = 3;
$location_other_listings = Location::whereDoesntHave('listings', function ($query) use($listing_id) {
$query->where('id', '=', $listing_id);
})
->where('id', $location_id)
->first();
但是对于我所有不同的列表都会产生NULL . 不知道为什么 .
如图所示,第一个查询有效 . 所以我能做的是:当 $location_other_listings
为空时,我知道没有其他列表连接 . 如果它不为空,我可以从结果数组中删除当前 listing_id
的列表 . 这将产生所需的结果,但我想知道我是否可以用一个查询产生这个结果 .
1 回答
您应该使用带有约束https://laravel.com/docs/5.7/eloquent-relationships#constraining-eager-loads的
with()
方法 .然后$ location_other_listings-> listing将不包含id为3的当前列表 .