Laravel Eloquent Сортировка по столбцу отношений - PullRequest
0 голосов
/ 24 октября 2018

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

Ниже приведены мои отношения:

public function date(){
    return $this->hasOne(agent_billings_dates::class,'id','dateID');
}

public function carrier(){
    return $this->hasOne(customer::class,'id','carrierID');
}

А также два атрибута, которые я добавил в качестве добавлений:

public function getItemCountAttribute(){
    return $this->items->count();
}

public function getItemMissingAttribute(){
    return $this->itemIssues->count();
}

public function getBatchSumAttribute(){
    return $this->items->sum('amount');

Они прекрасно отображаются, когда у меня есть следующие функции:

$batches = agent_billings_batches::with(['date','carrier','carrier.carrierDetails'])
        ->where('status',$request->status)
        ->get();

Но когда я это делаю, атрибуты и операторы сбиваются (однако дата сортируется соответствующим образом):

$batches = agent_billings_batches::with(['carrier','carrier.carrierDetails'])
        ->join('agent_billings_dates', 'agent_billings_dates.id', '=', 'agent_billings_batches.dateID')
        ->orderBy('agent_billings_dates.date','desc')
        ->where('status',$request->status)
        ->get();

Я что-то не так делаю?Буду признателен за любую помощь, которую может оказать любой.

Спасибо!

1 Ответ

0 голосов
/ 24 октября 2018

Eloquent не использует объединения при загрузке отношений.Он загружает их в отдельный запрос, поэтому вы не можете упорядочить основной результат, используя отношения во время запроса, вам нужно сделать это после сбора данных:

$batches = agent_billings_batches::with(['date','carrier','carrier.carrierDetails'])
    ->where('status',$request->status)
    ->get()
    ->sortBy(function ($batch) { 
         return $batch->date->date; 
    }); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...