[英]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.