2015-10-13 26 views
8

kontroler mam:Yii2 wybrać tylko kilka kolumn z pokrewnego modelu

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

W modelu WarehouseItem mam standardową deklarację (utworzony przez GII) Powiązania:

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

Jak mogę określić, które kolumny dane otrzymuję od relacji "użytkownik"? Obecnie otrzymuję wszystkie kolumny, które nie są dobre, ponieważ dane są wysyłane do Angular w formacie JSON. W tej chwili muszę pętli koryta $ przedmiotów i filer wszystkie kolumny nie chcę wysłać.

Odpowiedz

12

należy po prostu zmodyfikować kwerendę relacji tak:

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

Więcej: http://www.yiiframework.com/doc-2.0/yii-db-activequerytrait.html#with()-detail

+1

Otrzymuję ten błąd: Uwaga PHP - yii \ base \ ErrorException Niezdefiniowany indeks: user_id Co to może być? – Ljudotina

+1

Oh, ok, mam to .... muszę również wybrać kolumnę "user_id" z powiązanej tabeli. – Ljudotina

+1

Aby to działało, musisz również wybrać pole powiązania z powiązaną klasą. W tym przypadku byłby to "user_id" z modelu "User": '$ query-> select ('user_id, col1, col2');'. –

0

Kod powinien iść tą drogą.