Laravel Eloquent 匹配join的所有参数
Laravel Eloquent match to all parameters of join
我有一个 table,其中包含酒店 ID 和便利设施 ID。当用户选择设施时,我只需要拉出拥有所有所选设施的酒店。截至目前,它为我提供了至少拥有一家的所有酒店。我如何更改此构建器查询来处理它,以便它不包括没有所有这些的酒店。
$builder = Hotels::query();
$builder->select('hotels.id','hotels'.'hotels_name')
$request_amenities = $request->amenities;
$builder->join('amenities_hotels', function ($join) use($request_amenities) {
$join->on('amenities_hotels.hotel_id', '=', 'hotel.id')
->whereIn('amenities_hotels.amenities_id', $request_amenities);
});
这就像 WhereAll
你需要...
您必须为数组中的每个项目添加 whereHas
。
$builder = Hotels::query();
$builder->select('hotels.id', 'hotels' . 'hotels_name');
$request_amenities = $request->amenities;
if($request_amenities!=null)
{
for ($i = 0; $i < $this->count($request_amenities); $i++) {
$builder = $builder->whereHas('amenitiesHotels', function ($query) use ($i, $request_amenities) {
$query->where('amenities_hotels.amenities_id', $request_amenities[$i]);
});
}
在这个
中查看更多关于哪里的信息
酒店模型。
// ...
public function amenities(): BelongsToMany
{
return $this->belongsToMany(
Amenities::class,
"amenities_hotels"
);
}
// ...
查询到运行。
Hotels::select(['hotels.id','hotels'.'hotels_name'])
->whereHas('amenities', function ($query, $request_amenities) {
$query->whereIn('amenities.id', $request_amenities);
}, '=', count($request_amenities))->get();
上面的查询告诉Laravel加载有count($request_amenities)
amenities关系记录的酒店便利设施 关系记录按给定的 ID 数组过滤。
我有一个 table,其中包含酒店 ID 和便利设施 ID。当用户选择设施时,我只需要拉出拥有所有所选设施的酒店。截至目前,它为我提供了至少拥有一家的所有酒店。我如何更改此构建器查询来处理它,以便它不包括没有所有这些的酒店。
$builder = Hotels::query();
$builder->select('hotels.id','hotels'.'hotels_name')
$request_amenities = $request->amenities;
$builder->join('amenities_hotels', function ($join) use($request_amenities) {
$join->on('amenities_hotels.hotel_id', '=', 'hotel.id')
->whereIn('amenities_hotels.amenities_id', $request_amenities);
});
这就像 WhereAll
你需要...
您必须为数组中的每个项目添加 whereHas
。
$builder = Hotels::query();
$builder->select('hotels.id', 'hotels' . 'hotels_name');
$request_amenities = $request->amenities;
if($request_amenities!=null)
{
for ($i = 0; $i < $this->count($request_amenities); $i++) {
$builder = $builder->whereHas('amenitiesHotels', function ($query) use ($i, $request_amenities) {
$query->where('amenities_hotels.amenities_id', $request_amenities[$i]);
});
}
在这个
酒店模型。
// ...
public function amenities(): BelongsToMany
{
return $this->belongsToMany(
Amenities::class,
"amenities_hotels"
);
}
// ...
查询到运行。
Hotels::select(['hotels.id','hotels'.'hotels_name'])
->whereHas('amenities', function ($query, $request_amenities) {
$query->whereIn('amenities.id', $request_amenities);
}, '=', count($request_amenities))->get();
上面的查询告诉Laravel加载有count($request_amenities)
amenities关系记录的酒店便利设施 关系记录按给定的 ID 数组过滤。