@shtepsil
IT специалист в вэбразработке

Как сортировать элементы по полю связанной таблицы в Yii2?

Есть модели `ProductNomeclature` и `Brand`. А у модели `Brand` есть свойства `name`.
Как получить отсортированные строки таблицы ProductNomeclature, по полю `name` модели `Brand`?

В таблице ProductNomeclature есть поле "brand_code" - это ID бренда, таблицы brand.

После выборки я конечно же могу отсортировать массив, но мне нужна сортировка именно ещё на стадии выборки (SQL запроса). Сортировка массива ПОСЛЕ выборки, по вложенным значениям мне не подходит!!

В запросе такого вида, сортируются данные, которые выбираются из связанной таблицы brand:
$items = ProductNomeclature::find()
        ->with([
            'brand' => function ($query) {
                $query->orderBy('name', 'ASC');
            }
        ])
        ->all();


Но у меня по связи из таблицы brand, для каждой строки таблицы ProductNomeclature выбирается только один бренд, по этому там сортировка не нужна.
А нужно чтобы все строки из ProductNomeclature - сортировались по полю 'name' из таблицы brand

Вот так не работает:
$items = ProductNomeclature::find()
        ->with(['brand'])
        ->orderBy('name', 'ASC')
        ->all();


Потому что поля 'name' в таблице ProductNomeclature не существует.
Пробовал делать и так: ->orderBy('brand.name', 'ASC') - тоже не работает.
Говорит что в ProductNomeclature - поля brand.name не существует.

В гугле перерыл МНОГО ГДЕ! - Не нашел ничего подходящего.
Есть варианты, но для Laravel. Для Yii2 они не подходят.
В Yandex тоже много где рыл, не нашел ничего подходящего.

Очень очень буду благодарен за помощь в решении этой задачи.
  • Вопрос задан
  • 661 просмотр
Решения вопроса 1
@Arik
with юзает отдлеьный запрос с IN(), выходит первый запрос ничего не знает про вторую таблицу, соответственно нужно переделать под join запросы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы