Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2紧急加载不工作_Php_Activerecord_Yii2 - Fatal编程技术网

Php Yii2紧急加载不工作

Php Yii2紧急加载不工作,php,activerecord,yii2,Php,Activerecord,Yii2,我的数据库中有两个实体,它们通过一对多关系关联:“用户”和“广告” 我已经使用gii生成了模型类。 这是我在模型类中为用户提供的: public function getAds() { return $this->hasMany(Ad::className(), ['user' => 'id']); } 对于我的广告模型: public function getUser0() { return $this->hasOne(User::className(),

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

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

您仍然可以在有或没有急切加载的情况下获得广告对象

不同之处在于关系的填充方式,通过延迟加载,只有在访问关系时才会加载关系

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

也许你需要加入

$ads=Ad::find()->joinWith('user0')->all();