Как фильтровать по столбцу отношения Laravel

Как фильтровать по столбцу отношения

попробовал это
        ->whereHas('customer',function ($query) use ($order){
            $query->orderBy('first_name', $order);
        })
и это
        ->with(['customer' => function ($query) use ($order) {
            $query->orderBy('first_name', $order);
        }])

Оба не работали

Мне не нужен sortBy из коллекции ))

Jahongir Tursunboyev 22.03.2022 08:58

Orderby принимает второй параметр как asc или desc, и вы передаете переменную, каково значение этой переменной?

Muhammad Shareyar 22.03.2022 09:14

строка $order = 'описание'; да, будут только ASC, DESC, desc по умолчанию

Jahongir Tursunboyev 22.03.2022 09:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
3
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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.Спасибо

Jahongir Tursunboyev 23.03.2022 09:33

запрос {{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);
                })

Другие вопросы по теме