簡體   English   中英

Yii2渴望加載不起作用

[英]Yii2 eager loading not working

我的數據庫中有兩個實體,它們之間存在一對多關系:“用戶”和“廣告”,我已經使用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;

還是有更簡單的方法來做到這一點?

無論是否加載,您仍將獲得Ad對象。

區別在於關系的填充方式,延遲加載僅在訪問關系時加載。

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

可能您需要joinWith $ads = Ad::find()->joinWith('user0')->all();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM