Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 拉威尔雄辩的关系不在其中_Laravel_Laravel 5.7 - Fatal编程技术网

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();