当我尝试从记录
中选择自定义属性时 $data = Emotion::find()
->select('em_id, em_name, tbl_post.post_id, tbl_post.post_header')
->where(['em_id' => $id])
->joinWith('posts')
->one();
我有一个答案模型,其中相关字段具有完整的表字段集。 跟踪消息如下所示:
app\models\Emotion#1
( [yii\db\BaseActiveRecord:_attributes] =>
[ 'em_id' => 4
'em_name' => 'test_em']
[yii\db\BaseActiveRecord:_related] =>
[ 'posts' =>
[ 0 => app\models\Post#2 ( [yii\db\BaseActiveRecord:_attributes] =>
[ 'post_id' => 10
'post_header' => 'some header'
'post_date' => '2015-06-24 13:40:25',
'post_descr' => 'Rocco, continue the joke'
'post_content' => 'test content'...
所以,也许我做错了什么或这是一个框架问题。
在此处找到解决方法:Yii2 GitHub issue
我的案例看起来像这样:
$data = Emotion::find()
->select('em_id, em_name, tbl_post.post_id, tbl_post.post_header')
->where(['em_id' => $id])
->joinWith('posts')
->createCommand()
->queryAll();
此请求的输出将是一个原始数组。 是否有另一种方法可以在响应数据中包含ActiveRecord对象?
答案 0 :(得分:2)
您只需修改关系查询,例如:
$data = Emotion::find()
->select('em_id, em_name')
->where(['em_id' => $id])
->with([
'posts' => function($query) {
$query->select('post_id, post_header');
}
])->one();
由于您不在主查询中使用帖子,因此您不需要joinWith
。