Laravel 返回雄辩的结果,它匹配所有 id 而不仅仅是几个

Web*_*ect 1 laravel eloquent laravel-5.7

由于某种原因,我无法理解这个问题,尽管答案似乎就在我面前。

我有 3张桌子,rentals并且amenitiesamenities_rentals

便利设施包括空调、工作人员等。

有, .amenities_rentals​ 该表基本上是一个连接到 的参考表。rentail_idamenities_idrentalsamenities

在搜索中,用户可以通过勾选某些设施来缩小租金范围。到目前为止,它为我提供了所有至少有一个已勾选选项的租金。我需要将其范围缩小到仅拥有所有所选便利设施的出租房。这就是我所拥有的,这不仅没有正确地获取信息,而且我知道有更好的方法来做到这一点。

if($request->has('amenities')) 
{
    $rental_ids = AmenitiesRentals::select('rental_id')
                    ->whereIn('amenities_id',$request->amenities)
                    ->distinct()
                    ->get();
    $builder->whereIn('rentals.id', $rental_ids->toArray());
}
Run Code Online (Sandbox Code Playgroud)

构建器的其余部分工作正常。

Jon*_*eir 5

BelongsToMany正如 Kamal Paliwal 建议的那样,在模型中定义关系Rental

public function amenities() {
    return $this->belongsToMany(Amenity::class, 'amenities_rentals', 'rental_id', 'amenities_id');
}
Run Code Online (Sandbox Code Playgroud)

然后使用whereHas()

$amenities = $request->amenities;

$rentals = Rental::whereHas('amenities', function ($query) use ($amenities) {
    $query->whereIn('amenities.id', $amenities);
}, '=', count($amenities))->get();
Run Code Online (Sandbox Code Playgroud)