我的数据库中有两个实体,它们由一对多关系相关:“用户”和“广告” 我使用gii生成了模型类。 这就是我在用户的模型类中所拥有的:
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);
它仍然是一样的。
感谢。如果我想在ActiveController中通过xml发送广告及其相关用户数据,我是否必须这样做:
$t = array();
foreach ($ads as $ad) {
$t[] = [$ad, $ad->user0];
}
return $t;
或者有一种更简单的方法可以做到这一点?
答案 0 :(得分: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
}
答案 1 :(得分:0)
可能你需要加入
$ads = Ad::find()->joinWith('user0')->all();