Yii2 activerecord从相关表中选择自定义属性

时间:2016-01-08 21:18:32

标签: php select activerecord yii2

当我尝试从记录

中选择自定义属性时
 $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对象?

1 个答案:

答案 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