我有一个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"数据类型。
答案 0 :(得分:1)
您需要为Yii的关系选择主键列来构建它们。
e.g。假设您的列名为id
$eventModels = Event::find()->joinWith(['user' => function($q){
$q->select(['id', 'email']);
}])->all();
此外,您不需要返回$q
变量。