首页 文章

Yii2仅从相关模型中选择几列

提问于
浏览
8

在控制器我有:

public function actionGetItems()
{
    $model = new \app\models\WarehouseItems;
    $items = $model->find()->with(['user'])->asArray()->all();
    return $items;
}

在WarehouseItem模型中,我有标准(由gii创建)关系声明:

public function getUser()
{
    return $this->hasOne('\dektrium\user\models\User', ['user_id' => 'user_id']);
}

如何控制从“用户”关系中获得哪些列数据?我目前得到的所有列都不好,因为数据以JSON格式发送到Angular . 现在我必须通过$ items循环,并将我不想发送的所有列归档 .

2 回答

  • 12

    您应该简单地修改关系查询,如下所示:

    $items = \app\models\WarehouseItems::find()->with([
        'user' => function ($query) {
            $query->select('id, col1, col2');
        }
    ])->asArray()->all();
    

    阅读更多:http://www.yiiframework.com/doc-2.0/yii-db-activequerytrait.html#with()-detail

  • 0

    你的代码应该这样 .

    public function actionGetItems()
    {
        $items = \app\models\WarehouseItems::find()
            ->joinWith([
                 /*
                  *You need to use alias and then must select index key from parent table
                  *and foreign key from child table else your query will give an error as
                  *undefined index **relation_key**
                  */
                'user as u' => function($query){
                    $query->select(['u.user_id', 'u.col1', 'u.col2']);
                }
            ])
            ->asArray()
            ->all();
    
        return $items;
    }
    

相关问题