запросить отношение и получить результат в соответствии с запросом отношения - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу сделать запрос, чтобы получить отношения модели и отсортировать родительскую модель по запросу, который был сделан в моем отношении, как показано ниже:

 $data = Accommodation::with([  'accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
            $query->whereDate('from_date', '<=', $from_date);
            $query->whereDate('to_date', '>=', $to_date);
        }])->when($bed_count, function ($q, $bed_count) {
            $q->with([
                'accommodationRoomsLimited' => function ($q) use ($bed_count) {
                    $q->where('bed_count', $bed_count);
                }
            ]);

, поэтому, когда пользователь отправляет bed_count 3 для меняэтот запрос показывает только те комнаты, у которых bed_count равен 3, а если нет, то показывает размещение, но с пустыми комнатами в качестве отношения.Я хочу, чтобы мой результат был таким, чтобы, если в комнате не было bed_count из 3, то размещение, которое оно само не будет показывать в результате.Как я могу достичь этого?спасибо.

1 Ответ

0 голосов
/ 25 сентября 2019

Может быть, если вы используете whereHas вместо with, вы можете сделать это:

$data = Accommodation::with([  'accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
        $query->whereDate('from_date', '<=', $from_date);
        $query->whereDate('to_date', '>=', $to_date);
    }])->when($bed_count, function ($q, $bed_count) {
        $q->whereHas('accommodationRoomsLimited', function($query) use ($bed_count) {
            $query->where('bed_count', $bed_count);
        });

Обновить

if ($bed_count !== null) {
    $data = Accommodation::whereHas('accommodationRoomsLimited', function($query) use ($bed_count) {
        $query->where('bed_count', $bed_count);
    })->with(['accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
        $query->whereDate('from_date', '<=', $from_date);
        $query->whereDate('to_date', '>=', $to_date);
    }])->get();
} else {
    $data = Accommodation::with([  'accommodationRoomsLimited.discount', 'accommodationRoomsLimited', 'accommodationRoomsLimited.roomPricingHistorySearch' => function ($query) use ($from_date, $to_date) {
        $query->whereDate('from_date', '<=', $from_date);
        $query->whereDate('to_date', '>=', $to_date);
    }])->get();
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...