2016-08-19 64 views
1

如何在多個joinWiths之後獲取活動記錄中的每條記錄?YII2如何獲得加入後的每條記錄

$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()它給了我只是記錄我所期望的確切人數。

+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

你只嘗試此解決方案:

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

然後在您的視圖:

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