roomTypePacketServices = $roomTypePacketServices; } public function index($request) { $limit = $request->get("limit", ""); $query = $this->model; $query_array = $request->query(); $rate = $query_array['rate'] ?? ""; $checkCanReview = $query_array['checkCanReview'] ?? ""; $roomTypeid = $query_array['room_type_id'] ?? ""; $relations = $request->get("loadRelation", []); $room_type_id = $request->get("room_type_id")?? ""; $packet_id = $request->get("packet_id")?? ""; if (!empty($room_type_id) && !empty($packet_id)) { $roomTypePacket = $this->roomTypePacketServices ->getRoomTypePacketByPacketIdAndRoomTypeId($request["room_type_id"], $request["packet_id"]); if (empty($roomTypePacket)) { return collect(); } $query = $query->where("room_type_packet_id", $roomTypePacket->id); $query = $query->with('customer'); } if (!empty($rate)) { $query = $query->where("rate", $rate); } if (!empty($roomTypeid)) { $query = $query->with(['roomTypePacket' => function ($query) use ($roomTypeid) { $query = $query->where("room_type_packet.room_type_id", $roomTypeid); }]); } if (!empty($relations)) { foreach ($relations as $key => $value) { $query = $query->with($value); } } $this->timeCondition($request, $query, "ratings"); $query->orderBy('updated_at', 'desc'); $data = empty($limit) ? ($query->get()) : ($query->paginate($limit)); //$query->get(); //$this->model->where("dsd",12)->get(); return $data; } public function canReview($request,$data) { $roomTypePacketServices = app()->make(RoomTypePacketServices::class); $roomTypePacketId = $roomTypePacketServices->getRoomTypePacketByRoomTypeAndPacket($request['room_type_id'],$request['packet_id'])?->first()?->id??null; if (!empty($roomTypePacketId)) { $user = $this->getCurrentUser(); $bookings = $user->bookings->pluck('id')->all(); $roomBookingQuery = RoomBooking::query(); $roomBooking = $roomBookingQuery-> whereIn('room_booking.booking_id', $bookings) ->where('room_booking.room_type_packet_id', $roomTypePacketId) ->first(); return empty($roomBooking) ? false : true; } return false; } public function show($id) { $data = $this->model->where('id', $id)->first(); return $data; } // todo: khi nguời dùng thay đổi rating , thì phải cập nhật bảng room type packet public function save(array $attributes) { if (empty($attributes['room_type_packet_id'])) { $roomTypePacketServices = app()->make(RoomTypePacketServices::class); $roomTypePacket = $roomTypePacketServices ->getRoomTypePacketByPacketIdAndRoomTypeId($attributes["room_type_id"], $attributes["packet_id"]); if (empty($roomTypePacket)) { return null; } $attributes['room_type_packet_id'] = $roomTypePacket->id; } $attributes['customer_id'] = $this->getCurrentUser()->id; if (!empty($attributes['id'])) { $entity = $this->model->where('id', $attributes['id'])->first(); if ($entity) { $entity->fill($attributes)->save(); return $entity; } else { return null; } } else { $entity = $this->model->create($attributes); return $entity; } } public function delete($id) { $entity = $this->model ->where('id', $id)->first(); return !empty($entity) ? $entity->delete() : null; } }