YII2如何在加入后获取每条记录

YII2 how to get each record after joinwith

如何在多次joinWiths后获取一个active记录中的每条记录?

$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();

那么在你看来:

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

我使用 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>";
}