Здравствуйте.
Есть БД, содержащая в себе пользователей, книги и комментарии пользователей к книгам, обслуживаемая Laravel.
Есть следующие таблицы:
users, с полями
id, name
books, с полями
id, name
comments, с полями
id, user_id, book_id, comment
Хотелось бы в Laravel не слишком мудрено с помощью eloquent составить запрос, который для заданного пользователя выведет список книг, к которым он оставил комментарий и для каждой книги
только его комментарии.
Примерно так или чуть сложнее (без map'ов по полученным моделям результатами других запросов руками):
User::whereId(1)->with(['books', 'books.comments'])->get();
Чтобы в итоге получилось что-то вроде:
[
'id' => 1,
'name' => 'Иван',
'books' => [
[
'id' => 'book-1',
'name' => 'Три поросёнка',
'comments' => [
[
'id' => 'comment-1',
'user_id' => 1,
'book_id' => 'book-1',
'comment' => 'Класс!',
],
[
'id' => 'comment-2',
'user_id' => 1,
'book_id' => 'book-1',
'comment' => 'Очень глубоко...',
],
],
],
[
'id' => 'book-2',
'name' => 'Букварь',
'comments' => [
[
'id' => 'comment-3',
'user_id' => 1,
'book_id' => 'book-2',
'comment' => 'Пишу комментарий',
],
[
'id' => 'comment-4',
'user_id' => 1,
'book_id' => 'book-2',
'comment' => 'Только сейчас дошел посыл автора',
],
],
],
],
]
Как это реализовать? Какие отношения вроде hasManyThrough и т. д. нужно сделать?