0

У меня есть активная модель записи «Событие» с отношением hasOne 'getUser'. Теперь, если я:Yii 2 Active Query joinWith issue

$eventModels = Event::find()->joinWith([ 
     'user' => function($q){ 


     return $q; 

    }])->all(); 

---------------------------------------------------- 
    foreach($eventModels as $m){ 

     var_dump($m->user); //Everything good as $m->user returns the related user object 
     die('skdw'); 


    } 

Но, если я добавить «выбрать» в запросе joinWith, то связанные с объектом «пользователь» становится нулевым. Вот вопрос:

$eventModels = Event::find()->joinWith([ 
     'user' => function($q){ 

     $q->select('email');// or, ['email'] or ['user.email'] etc. fields. 

     return $q; 

    }])->all(); 

---------------------------------------------------- 
    foreach($eventModels as $m){ 

     var_dump($m->user); // Returns NULL 

     die('skdw'); 


    } 

Но, если я делаю это $ q-> выберите ('*'), а затем $ m-> пользователь работает.

Я считаю, что это используется для работы в некоторых предыдущих версиях Yii 2 (Прямо сейчас, я работаю на Yii 2.0.9)

Является ли это ожидаемое поведение? Если да, то каково решение для выбора только некоторых полей выбора для связанной модели joinWith? Я не хочу получать все связанные поля, поскольку некоторые из связанных полей могут содержать тип данных «ТЕКСТ».

ответ

1

Вам нужно выбрать столбец первичного ключа для отношения для Yii для их создания.

например. предполагается, что ваш столбец называется id

$eventModels = Event::find()->joinWith(['user' => function($q){ 
    $q->select(['id', 'email']); 
}])->all(); 

Кроме того, вам не нужно возвращать переменную $q.