Как фильтровать по столбцу отношения
->whereHas('customer',function ($query) use ($order){
$query->orderBy('first_name', $order);
})
->with(['customer' => function ($query) use ($order) {
$query->orderBy('first_name', $order);
}])
Оба не работали
Orderby принимает второй параметр как asc или desc, и вы передаете переменную, каково значение этой переменной?
строка $order = 'описание'; да, будут только ASC, DESC, desc по умолчанию
with()
используют нетерпеливую загрузку, что превращает это в два запроса.
Вам нужно использовать join()
вместо with()
$orders = Order
::join('customers', 'order.customer_id', '=', 'customers.id')
->orderBy('customers.first_name')
->get();
ИЛИ
Вы можете использовать методы sortBy()
или sortByDesc()
Collection
.
Например:
$orders = Order
::with('customer')
->get()
->sortBy('customer.first_name');
да with
и whereHas
не сработало. я использовал LeftJoin
.Спасибо
запрос {{host}}/admin/showcases?filterBy=companies:name
это упорядочить по родственной колонке компании
если просто {{host}}/admin/showcases?filterBy=name
будет только orderBy("name")
->when(str_contains($filterBy, ':'),
function (Builder $query) use ($filterBy, $order, $columns) {
$table = explode(':', $filterBy)[0];
$key = Str::singular($table) . "_id";
$column = explode(':', $filterBy)[1];
$selfTable = $this->getTable();
$query->leftJoin($table, "$selfTable.$key", "$table.id")
->when($columns !== ['*'],
function ($query) use ($columns, $selfTable) {
$columns = array_map(function ($column) use ($selfTable) {
return "$selfTable.$column";
}, $columns);
$query->select($columns);
},
fn($query) => $query->select(["$selfTable.*"]))
->orderBy("$table.$column", $order);
},
function ($query) use ($filterBy, $order) {
$query->orderBy($filterBy, $order);
})
Мне не нужен sortBy из коллекции ))