Yii 2 主动查询 joinWith 问题

Yii 2 Active Query joinWith issue

我有一个具有 hasOne 关系 'getUser' 的 Active Record 模型 "Event"。 现在,如果我这样做:

 $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 查询中添加 "select",则相关的 "user" 对象变为空。这是问题:

 $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 模型的一些 select 字段的解决方案是什么?我不想获取所有相关字段,因为某些相关字段可能包含 "TEXT" 数据类型。

您需要 select Yii 建立关系的主键列。

例如假设您的专栏名为 id

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

此外,您不需要 return $q 变量。