Laravel Красноречивый, в столбце ORDER - PullRequest
3 голосов
/ 29 мая 2020

У меня есть запрос whereHas, который получает данные из сводной таблицы. Но в сводной таблице у меня также есть дополнительный столбец под названием «порядок», и я использую этот столбец, чтобы убедиться, что элементы упорядочены в правильной ПОСЛЕДОВАТЕЛЬНОСТИ, поскольку он представляет автобусный маршрут. Пример: Автобус / паром останавливается в 1 2 3 4 5 6.

У нас есть пункт отправления и назначения, которые представлены как 'port_id'.

Так, например, запрос ниже дает мне правильные данные, но мне нужно убедиться, что столбец «порядок» всегда находится в правильной последовательности на основе идентификатора порта отправления и идентификатора порта прибытия. Поэтому, если вы выполните поиск от port_id 14 до port_id 15, он не должен возвращать никаких результатов, поскольку столбец 'порядок' не соединяет их таким образом.

Это то, что я пробовал:

        $routes = Route::whereHas('ports', function($query) use ($request) {
       $query->where('port_id', $request->route['from']['id']);
    })
    ->whereHas('ports', function($query) use ($request) {
        $query->where('port_id', $request->route['to']['id']);
    })->get();

А это сводная таблица: enter image description here

Это таблица маршрутов: enter image description here

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

я думаю, вы могли бы сделать заказ, используя join, затем упорядочив результат по route_id, а затем по столбцу 'order':

$routes = Route::whereHas('ports', function($query) use ($request) {
       $query->where('port_id', $request->route['from']['id']);
    })
    ->whereHas('ports', function($query) use ($request) {
        $query->where('port_id', $request->route['to']['id']);
    })
->join('route_port','route_port.route_id','=','routes.id')
->join('ports','route_port.port_id','ports.id')->orderby('route_id')
->orderby('order')->get();

исправьте имена таблиц, если они были неправильными ...

0 голосов
/ 29 мая 2020

Используйте whereBetween

$routes = Route::whereHas('ports', function($query) use ($request) {
          $query->whereBetween('port_id',[$request->route['from']['id'],$request->route['to']['id']]);
          })->get();

Учебное пособие WhereBetween

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