@acid23m

Как в YII2 выбрать только нужные столбцы при жадной загрузке?

В документации написано, что можно управлять запросом при жадной загрузке с помощью анонимной функции:
When eagerly loading a relation, you can customize...
И дан пример:
$customers = Customer::find()->with([
    'country',
    'orders' => function ($query) {
        $query->andWhere(['status' => Order::STATUS_ACTIVE]);
    },
])->all();

В данном примере из таблицы `order` берутся все столбцы, но мне все не нужны. По аналогии я должен сделать так:
...
'orders' => function ($query) {
    $query->addSelect(['id', 'title', 'date']);
    $query->andWhere(['status' => Order::STATUS_ACTIVE]);
},
...

Но это не работает, вообще ничего не возвращается, пустой массив.
Что не так?
  • Вопрос задан
  • 1382 просмотра
Пригласить эксперта
Ответы на вопрос 2
LittleFatNinja
@LittleFatNinja
горе девелопер, любитель лютой садомии
посмотри какой готовый запрос формируется
Ответ написан
Комментировать
@acid23m Автор вопроса
Вот мой запрос:
$data = AddressClassificator::find()
            ->select('id, iata')
            ->with(['addressClassificatorTranslates' => function($query) {
                $query->addSelect(['id', 'name', 'country', 'city']);
                $query->andWhere(['lang' => Yii::$app->language]);
            }])
            ->asArray()
            ->all();

Сформированный SQL
SELECT `id`, `name`, `country`, `city` FROM `addressClassificatorTranslate` WHERE (`lang`='ru-RU') AND (`addressClassificator_id` IN ('1', '2'))

SELECT `id`, `iata` FROM `addressClassificator` ORDER BY `iata`

на выходе
[
    0 => [
        'id' => '1'
        'iata' => 'AAA'
        'addressClassificatorTranslates' => []
    ]
]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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