在控制器中我有:
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']);
}
如何控制我从哪个列数据" user"关系?我目前得到的所有列都不好,因为数据以JSON格式发送到Angular。 现在我必须通过$ items循环,并将我不想发送的所有列归档。
答案 0 :(得分:13)
您只需修改关系查询,如下所示:
$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
答案 1 :(得分: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;
}
答案 2 :(得分:-1)
内部WarehouseItem模型
test/test_api.py:13: in <module>
with api.test_client() as client:
E AttributeError: module 'src.api' has no attribute 'test_client'