2016-11-03 5 views
1

"User"와 "Ad" gii를 사용하여 모델 클래스를 생성했습니다.Yii2 열심히로드되지 않음

public function getAds() 
{ 
    return $this->hasMany(Ad::className(), ['user' => 'id']); 
} 

을 내 광고 모델 : 이것은 내가 사용 내 모델 클래스에 무엇을 가지고 내가 할 컨트롤러에서 Yii2 문서에 따라

public function getUser0() 
{ 
    return $this->hasOne(User::className(), ['id' => 'user']); 
} 

$ads = Ad::find()->all(); 
var_dump($ads[0]->user); 

DB에서 사용자 데이터를 열심히로드해야하지만 외래 키 (1) 만 가져옵니다. 시도해도

$ads = Ad::find()->with('user0')->all(); 
var_dump($ads[0]->user); 

여전히 동일합니다.

감사합니다.

$t = array(); 
    foreach ($ads as $ad) { 
     $t[] = [$ad, $ad->user0]; 
    } 
    return $t; 

을하거나 할 수있는 더 간단한 방법이있다 : 내가 ActiveController에서 XML에 의해 광고 및 관련 사용자 데이터를 보내려면, 내가 이런 식으로 뭔가를해야합니까?

답변

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

아마 당신은 joinWith에게 $ads = Ad::find()->joinWith('user0')->all();

필요