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
变量。
我有一个具有 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
变量。