Laravel 5: Eloquent — порядок по отношению при возврате одной записи

Я пытаюсь построить запрос в красноречивом с данными, отсортированными по связи. Представьте себе эту структуру БД:

ТАБЛИЦА: Станция

id
name
...

ТАБЛИЦА: station_status:

id
station_id
status_type_id
date
...

ТАБЛИЦА: status_type:

id
description
...

МОДЕЛИ

class Station extends \Eloquent
{
public function stationStatus() {
return $this->hasMany('App\StationStatus', 'station_id', 'id');
}
}

class StationStatus extends \Eloquent
{
public function statusType() {
return $this->hasOne('App\StatusType', 'id', 'status_type_id');
}
}

class StatusType extends \Eloquent
{
...
}

Теперь вопрос. Как запросить модель станции по идентификатору станции, но отсортировать по описанию связанных типов статуса?

Пока у меня есть:

// This just do not work
$query = Station::join('station_status', 'station.id', '=',   'station_status.station_id')
->join('status_type', 'station_status.status_type_id', '=', 'status_type.id')
->orderBy('status_type.description', 'ASC')
->select(['stations.*'])
->with(['stationStatus.statusType']
->find(110);

Я думаю, проблема в том, что я не возвращаю коллекцию, а только один элемент, используя метод find (), как я могу преодолеть эту проблему?

Большое спасибо за любую помощь!

2

Решение

Попробуй это:

$query = Station::with(['stationStatus' => function($q){
$q->join('status_type', 'station_status.status_type_id', '=', 'status_type.id')
->orderBy('status_type.description', 'ASC');
}])->find(110);

С это удобный способ получения связанных объектов, но он не выполняет соединение. Он выполняет новый запрос и присоединяет все элементы к вашей коллекции. Вы можете добавить свою собственную логику в запрос, как я сделал с $q->orderBy(...),

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]