0

"getUser"hasOne 관계가있는 활성 레코드 모델 "이벤트"가 있습니다. 지금, 내가 할 경우 : 나는이 joinWith 질의에 "선택"을 추가하면Yii 2 활성 쿼리 joinWith 문제가

$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'); 


    } 

그러나, 다음, 관련 "사용자"개체가 null이됩니다. 여기에 문제가 있습니다 :

$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-> select ('*')를 선택하면 $ m-> user working. 나는 그것이 YII 2의 일부 이전 버전에서 작동하는 데 사용 생각

이 (지금 내가 YII 일하고 2.0.9)

이 예상되는 동작인가? 그렇다면 관련 joinWith 모델에 대한 일부 선택 필드 만 가져 오는 솔루션은 무엇입니까? 관련 필드의 일부가 "TEXT"데이터 유형을 포함 할 수 있으므로 관련 필드를 모두 가져오고 싶지 않습니다.

답변

1

Yii가 관계를 만들기 위해 관계에 대한 기본 키 열을 선택해야합니다.

예컨대 가정 당신의 열은 또한, 당신은 $q 변수를 반환 할 필요가 없습니다

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

id라고합니다.