Сортировка по значению в связи Laravel
Подскажите как отсортировать по значению в связи products ?
public function show(Branch $branch)
{
return (new BranchResource($branch->load(['products.pays','programms','dopproducts', 'halls'])))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
Вот какие данные приходят, сортировать products нужно по price_new
{
"id": 1,
"name": "Академия футбола Одесса",
"adress": "Проспект Добровольського, 122/2",
"phone": "+38 (067) 654-23-54",
"products": [
{
"id": 10,
"name": "Полная оплата",
"price_new": 300,
},
{
"id": 11,
"name": "40/30/30",
"price_new": 200,
},
{
"id": 14,
"name": "50/50",
"price_new": 100,
}
],
"programms": [
{
"id": 2,
"name": "Вперед до зірок",
"branch_id": 1,
"created_at": "2020-05-20 18:33:12",
"updated_at": "2020-05-22 23:39:30"
}
],
"dopproducts": [
{
"id": 1,
"branch_id": 1,
"name": "Индивидуальная тренировка",
"price": 300,
"created_at": "2020-06-18 21:11:42",
"updated_at": "2020-06-18 21:11:42"
}
],
"halls": [
{
"id": 3,
"branch_id": 1,
"name": "Крытое поле клуба",
"created_at": "2020-06-18 21:11:14",
"updated_at": "2020-06-18 21:11:14"
}
]
}
Ответы (1 шт):
Автор решения: Максим К
→ Ссылка
Итак, чтобы подгруженные связи отсортировать на стадии БД, надо использовать анонимную функцию для кастомизации запроса https://laravel.com/docs/7.x/eloquent-relationships#constraining-eager-loads
public function show(Branch $branch)
{
$branch->load([
'products' => function($query){
$query->orderBy('price_new');
},
'products.pays',
'programms',
'dopproducts',
'halls'
]));
return (new BranchResource($branch)
->response()
->setStatusCode(Response::HTTP_CREATED);
}