@Pios88

Как вывести вложенные списки из связанной таблицы?

Есть две связанные таблицы.
author: id | name
book: id | author_id | title

Есть код, который выводит список авторов и количество книг каждого из них:

class AuthorController extends Controller {
    public function actionIndex() {
        $authors = Author::find()->select(['author.id', 'author.name', 'books' => 'count(*)'])
            ->leftJoin('book', 'author.id = book.author_id')
            ->groupBy('author.id')->asArray()->all();
        return $this->render('index', ['authors' => $authors]);   
    }
}


Представление:
<?php foreach($authors as $author){
  echo '<h2>'.$author['name'].'</h2>';
  echo '<p>Книг: '.$author['books'].'</p>';
}
 ?>


Изломал всю голову как модефицировать код так, чтобы можно было вывести не количество книг, а их список. То есть примерно вот так сделать:

Автор 1:
- книга 1
- книга2
- книга3
Автор 2:
- книга 1
- книга 2
и т.п.
Где "Автор N" - это name из таблицы author, а "книга N" - title'ы из таблицы book.
Моей квалификации на это дело не хватает. Подскажите как можно модифицировать приведенный выше код или как можно сделать это каки-то иным способом?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
$authors = Author::find()->with('book')->all();
foreach($authors as $author){
         echo $author->name;
         echo '<br>';
         if($author->book){
              echo 'у автора ' . count($author->name) . 'книг';
              foreach($author->book as $book){
                  echo $book->title;
                  echo '<br>';
               }
          }else{
                echo 'этот дядя не писал книг';
                echo '<br>';
         }
}

естественно предварительно надо создать связь типа hasMany в модели. Если "связи" слово страшное, стоит или
почитать про связи
или
посмотреть про связи
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
villiwalla
@villiwalla
HTML-верстка
Напиши в модели автора, метод getBooks(где и делай join), а в методе котроллера выбирай только авторов. А в представлении в цикле проходи по авторам, а во вложенном цикле дергай метод books.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы