0

私はアクティブレコードモデル "イベント" hasOneの関係 'getUser'を持っています。 今、私がしなければ: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'); 


    } 

しかし、私はjoinWithクエリで「選択」を追加した場合、その後、関連する「ユーザー」オブジェクトが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の作業が行われます。私は

(私はYiiの2.0.9に取り組んでいます、今のところ)それはYiiの2のいくつかの以前のバージョンで動作するように使用と考えてい

は、この予想される動作ですか?はいの場合、関連するjoinWithモデルの一部の選択フィールドのみを取得するソリューションは何ですか?関連するフィールドの一部に「TEXT」データ型が含まれている可能性があるため、すべての関連フィールドを取得する必要はありません。

答えて

1

Yiiがそれらを構築するためのリレーションシップの主キー列を選択する必要があります。

あなたの列がid

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

と呼ばれていると仮定しても、あなたは$q変数を返す必要はありません。