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

如果要匹配所有服务,可以使用forloop创建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 数组长度的行应该是唯一的。