Laravel - Как сделать заказ по связанному атрибуту в hasMany - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть две сущности: Производители и Протоколы .У производителей есть много протоколов.

Проблема

Выберите всех производителей, упорядоченных по дате их последнего создания протокола.

Решение

Чтобы получить это, я попытался:

$producers = Producer::join('protocol', 'protocol.producer_id', '=', 'producer.id')
  ->orderBy('protocol.created_at', 'desc');

Но просто не сработал, как ожидалось, главным образом потому, что я даже ограничил последний протокол.Как мне добиться этого с помощью Laravel Eloquent?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

сначала вообще опишите отношение для последнего протокола на модели производителя

public function last_protocol(){
    return $this->hasOne(Protocol::class)->latest();
}

, затем в вашем контроллере

$producers = Producer::with('last_protocol')->get()->sortByDesc('last_protocol.created_at');
0 голосов
/ 18 сентября 2018

Использование groupBy():

$producers = Producer::select('producer.*')
    ->join('protocol', 'protocol.producer_id', '=', 'producer.id')
    ->groupBy('producer.id')
    ->orderByRaw('max(protocol.created_at) desc');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...