Есть таблица book и author. Связаны через столбцы id (автора) и author_id (у книги). Нужно вывести количество книг у каждого автора. Вот такой код я написал:
class AuthorController extends Controller {
public function actionIndex() {
$author = Author::find()->all();
$id = Author::find()->select('id');
$book = Book::find()->select(['author_id' => $id])->count();
return $this->render('index', ['author' => $author, 'book' => $book, 'id' => $id]);
}
}
Если в запросе Book::find() я указываю вместо переменной $id конкретное значение id автора, то получаю правильный результат, действительное число книг автора с этим id в базе. Но это не работает с переменной. В таком виде, как я указал выше, я получаю общее количество книг в базе, а не количество книг конкретного автора. Пробовал использовать foreach в этом же контроллере:
foreach ($book as $author_id) {
$book = Book::find()->select(['author_id' => $author_id])->count();
}
На выходе получаю 1,1,1,1,.... - столько единиц сколько книг в базе. Пробовал кучу других вариаций использования foreach - итог тот же: или ошибка, или столбик из единиц, или нулей, или общее количество книг а базе так же столбиком. Я уже голову сломал пытаясь разобраться как это сделать и что не так.
В представление вывожу вот так:
<?php if(!empty($author)); ?>
<?php foreach($author as $author): ?>
<h3><a href="#"> <?=$author->name?> </a></h3>
<h3><a href="#"> <?=$author->id?> </a></h3>
<h3><a href="#"> <?=$book?> </a></h3>
<?php endforeach; ?>
id авторов и name выводятся корректно. Количество книг для эксперимента пробовал выводить отдельным циклом, эффект тот же.
Выручайте!