У меня есть несколько отношений, одно из которых я хотел бы использовать для упорядочивания списка, но я не могу найти правильный способ сделать это.
Ниже представлены мои отношения:
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();
Но атрибуты и with отваливаются, когда я это делаю (однако дата отсортирована соответствующим образом):
$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();
Я делаю что-то неправильно? Буду признателен за любую помощь, которую может дать кто-нибудь.
Спасибо!






Eloquent не использует объединения при загрузке отношений. Он загружает их в отдельный запрос, поэтому вы не можете упорядочить основной результат с помощью отношения во время запроса, вам нужно сделать это после того, как данные будут собраны:
$batches = agent_billings_batches::with(['date','carrier','carrier.carrierDetails'])
->where('status',$request->status)
->get()
->sortBy(function ($batch) {
return $batch->date->date;
});
@ N69S да, у него есть 2 основных недостатка, если вам нужно разбивать на страницы: (1) вам нужно загрузить весь результат и (2) вам нужно вручную создать экземпляр LengthAwarePaginator (или простой). Однако либо это, либо использование объединений имеет свои недостатки.
@apokryfos - Для меня разбивка на страницы не является проблемой в данный момент (так как на максимальном уровне он должен возвращать только около 20/30 результатов. Но я сделал то, что вы сказали выше, и он по-прежнему выводит результаты, но не в любом порядке, Я также попробовал sortByDesc, и ничего не изменилось. Были ли у вас другие предложения?
это решение нецелесообразно, если вы разбиваете свой результат на страницы в таком порядке