2015-10-13 94 views
8

只有幾列在控制我有:Yii2選擇關聯模型

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和filer出我不想發送的所有列。

回答

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

+1

我得到這個錯誤:PHP的通知 - 警予\基地\ ErrorException 未定義指數:USER_ID什麼會是什麼? – Ljudotina

+1

哦,好吧,我知道了....我必須從相關表中選擇「user_id」列。 – Ljudotina

+1

爲了它的工作原理,您還需要選擇相關類的鏈接字段。在這種情況下,它將是'User'模型的'user_id':'$ query-> select('user_id,col1,col2');'。 –

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; 
}