2016-11-03 4 views
1

У меня есть две сущности в моей базе данных, которые связаны друг с другом отношением: «Пользователь» и «Объявление» Я создал классы моделей, используя gii. Это то, что у меня в классе модели для пользователя:Yii2 загрузок не работает

public function getAds() 
{ 
    return $this->hasMany(Ad::className(), ['user' => 'id']); 
} 

и для моей модели объявления:

public function getUser0() 
{ 
    return $this->hasOne(User::className(), ['id' => 'user']); 
} 

согласно Yii2 документации, в контроллере, когда я делаю

$ads = Ad::find()->all(); 
var_dump($ads[0]->user); 

Он должен с нетерпением загружать данные пользователя из БД, но я получаю только внешний ключ (1). Даже когда я пытаюсь

$ads = Ad::find()->with('user0')->all(); 
var_dump($ads[0]->user); 

Св все то же.

спасибо. Если я хочу, чтобы отправить объявления и связанные с ними пользовательские данные с помощью XML в ActiveController, я должен сделать что-то вроде этого:

$t = array(); 
    foreach ($ads as $ad) { 
     $t[] = [$ad, $ad->user0]; 
    } 
    return $t; 

Или есть более простой способ сделать это?

ответ

2

Вы по-прежнему получаете объекты объявлений с или без загрузки.

Разница заключается в том, как отношения заселены, при ленивой загрузке отношения загружаются только при их доступе.

$ads = Ad::find()->all(); 
foreach ($ads as $ad) { 
    var_dump($ad->user0); // query to load user record here 
} 

С большой загрузкой они заполнены спереди.

$ads = Ad::find()->with('user0')->all(); 
foreach ($ads as $ad) { 
    var_dump($ad->user0); // user0 already populated, no query 
} 
0

Возможно, Вам необходимо joinWith $ads = Ad::find()->joinWith('user0')->all();

Смежные вопросы