Yii 2 Active Query joinWith问题

时间:2016-10-26 13:46:23

标签: yii2 yii2-advanced-app yii-extensions yii-components yii2-basic-app

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

 $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查询中,然后是相关的" 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->选择(' *'),那么$ m->用户正在工作。

我相信它曾经在Yii 2的一些早期版本中工作(现在,我正在使用Yii 2.0.9)

这是预期的行为吗?如果是,那么获取相关joinWith模型的一些选择字段的解决方案是什么?我不想获取所有相关字段,因为某些相关字段可能包含" TEXT"数据类型。

1 个答案:

答案 0 :(得分:1)

您需要为Yii的关系选择主键列来构建它们。

e.g。假设您的列名为id

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

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