Yii2急切加载不起作用

时间:2016-11-03 14:26:38

标签: php activerecord yii2

我的数据库中有两个实体,它们由一对多关系相关:“用户”和“广告” 我使用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;

或者有一种更简单的方法可以做到这一点?

2 个答案:

答案 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();

相关问题