2016-08-19 1 views
1

複数のjoinWithsの後でアクティブレコードの各レコードを取得する方法は?YII2 joinwithの後に各レコードを取得する方法

$model = \common\models\opcr\OpcrKra::find() 
     ->joinWith('opcrRoObjectives') 
     ->joinWith('opcrRoObjectives.opcrFdObjectives') 
     ->joinWith('opcrRoObjectives.opcrFdObjectives.opcrIndividuals'); 

私はTrying to get property of non-objectエラーを受け取ります。

foreach ($model->all() as $row) { 
     echo "<tr>" 
     . "<td></td>" 
     . "<td>" . $row->kra . "</td>" 
     . "<td>" . $row->opcrRoObjectives->id . "</td>" // error here 
     . "</tr>"; 
     } 

私は$row->count()を表示しようとしましたが、それは私が期待されるレコードだけ正確な数を与えました。あなたのビューで次に

$model = \common\models\opcr\OpcrKra::find() 
    ->joinWith('opcrRoObjectives') 
    ->joinWith('opcrRoObjectives.opcrFdObjectives') 
    ->joinWith('opcrRoObjectives.opcrFdObjectives.opcrIndividuals') 
$result = $model->asArray()->all(); 

+0

OpcrRoObjectivesがOpcrKraレコードごとに存在していますか? 'joinWith'はLEFT JOINを適用します。 –

答えて

1

私はeager loadingを使用して、これを解決しました。

$authors = Author::find()->with('posts')->all(); // fetches the authors with their posts 
    foreach($authors as $author) { 
    echo "<h2>Author : " . $author->name . "</h2>"; 
    echo "<ul>"; 

    foreach($author->posts as $post) { // no query executed here 
     echo "<li>" . $post->title . "</li>"; 
    } 
    echo "</ul>"; 
} 
1

あなたは、このソリューションを試してみてください

foreach ($model as $row) { 
    echo "<tr>" 
    . "<td></td>" 
    . "<td>" . $row->kra . "</td>" 
    . "<td>" . $row['opcrRoObjectives']['id'] . "</td>" 
    . "</tr>"; 
    } 
関連する問題