Laravel 查询具有所有 ID 的关系
Laravel query with relationship where have all ids
我尝试查询我得到的 房间 我拥有所有 服务 。
使用我当前的代码,我得到了 room,它至少具有来自数组的 services 之一,因为我正在使用 whereIn
.
$rooms = Room::select([
'rooms.id',
'rooms.available_from',
'rooms.available_till',
'rooms.description',
'rooms.room_type_id',
'room_types.name as room_types_name',
])
->leftJoin('room_types', 'room_types.id', 'rooms.room_type_id')
->with('services','reserved_rooms')
->when($request->services, function ($query) use ($request) {
$query->whereHas('services', function ($q) use ($request) {
$q->whereIn('id', $request->services);
});
})
->orderByDesc('id')
->get();
如果要匹配所有服务,可以使用for
loop
创建AND查询。
试试下面的代码:
->when($request->services, function ($query) use ($request) {
foreach ($request->services as $key => $service) {
$query->whereHas('services', function ($q) use ($service) {
$q->where('id', $service);
});
}
})
->when($request->services, function ($query) use ($request) {
$query->whereHas('services', function ($q) use ($request) {
$q->selectRaw('count(distinct id)')->whereIn('id', $request->services);
}, '=', count($request->services)
);
})
已更改,未测试,但这是一般的想法:获取不同 ID 的 COUNT 等于 array.The 数组长度的行应该是唯一的。
我尝试查询我得到的 房间 我拥有所有 服务 。
使用我当前的代码,我得到了 room,它至少具有来自数组的 services 之一,因为我正在使用 whereIn
.
$rooms = Room::select([
'rooms.id',
'rooms.available_from',
'rooms.available_till',
'rooms.description',
'rooms.room_type_id',
'room_types.name as room_types_name',
])
->leftJoin('room_types', 'room_types.id', 'rooms.room_type_id')
->with('services','reserved_rooms')
->when($request->services, function ($query) use ($request) {
$query->whereHas('services', function ($q) use ($request) {
$q->whereIn('id', $request->services);
});
})
->orderByDesc('id')
->get();
如果要匹配所有服务,可以使用for
loop
创建AND查询。
试试下面的代码:
->when($request->services, function ($query) use ($request) {
foreach ($request->services as $key => $service) {
$query->whereHas('services', function ($q) use ($service) {
$q->where('id', $service);
});
}
})
->when($request->services, function ($query) use ($request) {
$query->whereHas('services', function ($q) use ($request) {
$q->selectRaw('count(distinct id)')->whereIn('id', $request->services);
}, '=', count($request->services)
);
})
已更改,未测试,但这是一般的想法:获取不同 ID 的 COUNT 等于 array.The 数组长度的行应该是唯一的。