function ($query) use ($request) { if ($request->has_ongoing_order) { $query->has("onGoingOrder"); } $query->with(["onGoingOrder" => function ($query) { $query->leftJoin("paramedic", "orders.paramedic_id", "=", "paramedic.id") ->select("orders.id", "orders.bed_id", "orders.paramedic_id", "orders.status", "paramedic.name as paramedic_name"); }])->select("bed.id", "bed.name", "bed.room_id", "bed.area_id", "bed.myindex") ->leftJoin("room", "bed.room_id", "=", "room.id") ->addSelect("room.name as room_name") ->orderBy("room.name") ->orderBy("bed.name"); }]) ->whereRaw("`area`.`project_id` = '{$request->project_id}'") ->orderBy("building.myindex") ->orderBy("area.myindex") ->select("area.id", "area.name", "area.building_id", "area.project_id") ->leftJoin("building", "area.building_id", "=", "building.id") ->addSelect("building.name as building_name") ->withCount("beds") ->get(); if ($request->has_ongoing_order) { $areas = $areas->filter(function($item) { return $item->beds->count(); }); } return response()->json($areas->toArray()); } }