Laravel, где есть связь с 2 записями, соответствующими разным значениям

#laravel #eloquent

Вопрос:

Я работаю над системой автобусных маршрутов. Маршрут может иметь несколько остановок (местоположений).

У меня есть следующая структура таблицы:

Автобус

  • ID
  • Имя
  • идентификатор маршрута

маршрут

  • ID
  • Имя

route_locations*

  • ID
  • идентификатор маршрута
  • идентификатор места
  • приказ
  • старт (начало автобусного маршрута — 1 = истина, 0 = ложь)
  • конец (последняя остановка — 1 = истина, 0 = ложь)

места

  • ID
  • Имя
  • слизень

Поэтому, когда кто-то ищет доступный автобус, у нас есть $от и $до в виде пули. Пример: от-это «местоположение-a», а до-это «местоположение-d».

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

     $from = $request->from;
    $to = $request->to;

    $busses = Bus::whereHas('route', function ($query) use ($from, $to) {
        $query->whereHas('locations', function ($query) use ($from, $to) {
            $query->whereHas('place', function($query) use ($from, $to) {
                $query->where('slug', $from)
                    ->where('end', '!=', 1);
            })
                ->whereHas('place', function ($query) use ($to) {
                    $query->where('slug', $to)
                        ->where('start', '!=', 1);
            });
        });
    })->get();
 

маршрут, места и место-это мои отношения. Они прекрасно работают.

Когда я удалю второй запрос whereHas («место»), он вернет автобус, маршрут которого имеет правильное начальное местоположение. Но я пытаюсь ездить только на автобусах, где маршрут имеет местоположение » от «и в правильном «порядке», где » от «всегда ниже, чем «до», если это имеет смысл? Следующий «заказ» всегда должен быть выше.

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

Пожалуйста, помогите мне.

Спасибо!

Комментарии:

1. попробуйте использовать этот код $busses = Bus::whereHas('route.locations.place', function ($query) use ($from, $to) { $query->where('slug', $from)->where('end', '!=', 1);})->whereHas('route.locations.place', function ($query) use ($from, $to) {$query->where('slug', $to)->where('start', '!=', 1);})->get();

2. Запрос работает, но я уже понял это, но он все равно не проверяет, выше ли столбец «порядок», чем предыдущий. У $to должен быть столбец «заказ» с более высоким значением, чем у $from. Спасибо.