Laravel 拉威尔雄辩的关系不在其中
我已经看过很多关于这个问题的答案,我的代码正在运行,但它并没有产生预期的结果 我有一个位置表和列表表。许多列表可以属于一个位置 我想做的是获得一个特定的位置,结果应该包括除用户正在查看的列表之外的所有连接的列表。我将的Laravel 拉威尔雄辩的关系不在其中,laravel,laravel-5.7,Laravel,Laravel 5.7,我已经看过很多关于这个问题的答案,我的代码正在运行,但它并没有产生预期的结果 我有一个位置表和列表表。许多列表可以属于一个位置 我想做的是获得一个特定的位置,结果应该包括除用户正在查看的列表之外的所有连接的列表。我将的$listing\u id传递给此的子查询,但问题是$location\u other\u listings仍然包含该列表(在下面的示例中,$listing\u id=3) 更新: 我也尝试了相反的方法(whereDoesntHave和=而不是!=): 但这会为我的所有不同列表生成
$listing\u id
传递给此的子查询,但问题是$location\u other\u listings
仍然包含该列表(在下面的示例中,$listing\u id=3
)
更新:
我也尝试了相反的方法(whereDoesntHave
和=
而不是!=
):
但这会为我的所有不同列表生成NULL。不知道为什么
如图所示,第一个查询可以工作。所以我能做的是:当$location\u other\u listings
为空时,我知道没有其他列表连接。如果它不是空的,我可以从结果数组中删除带有当前listing\u id
的列表。这将生成所需的结果,但是我想知道是否可以通过一个查询生成此结果。您应该使用带约束的with()
方法
然后,$location\u other\u listings->listings将不包含id为3的当前列表。您可以尝试在子查询中使用idd而不是id来中断查询,这样您将获得原始查询,从而使解决此问题更容易。
$listing_id = 3;
$location_other_listings = Location::whereHas('listings', function ($query) use($listing_id) {
$query->where('id', '!=', $listing_id);
})
->where('id', $location_id)
->first();
$listing_id = 3;
$location_other_listings = Location::whereDoesntHave('listings', function ($query) use($listing_id) {
$query->where('id', '=', $listing_id);
})
->where('id', $location_id)
->first();
$listing_id = 3;
$location_other_listings = Location::with([
'listings' => function($query) use ($listing_id){
$query->where('id', '!=', $listing_id);
}
])
->where('id', $location_id)
->first();