Связь "многие-ко-многим"
Давайте представим себе гипотетическую ситуацию, в которой у нас есть некая электронная библиотека и нам нужна возможность не только получать список жанров определённой книги, но и список всех книг по определённому жанру. Вот здесь и пригодится связь "многие-ко-многим"? Как это лучше организовать в техническом плане? Для этого потребуются три таблички.
В первой будут храниться книги и называться она допустим будет company_library_books. В этой табличке будут два поля - id и title (название книги).
Вторая таблица будет называться company_library_genres, и в ней будет храниться список жанров. Здесь так же будут два поля - id и genre_title.
И в последней таблице, будет храниться связь между книгами и жанрами. Называться она будет company_library_books_genres и у неё так же будут две колонки:
book_id - которая соответствует id в таблице книги.
genre_id - которая соответствует id в таблице жанра.
Я исхожу из того, что у нас уже сформированы модели Book и Genre.
Предположим мы хотим получить все жанры для одной книги. Тогда в модели Book у нас должно быть задано свойство:
public $belongsToMany = [
'genres' => [
'Company\Library\Models\Genre',
'table' => 'company_library_books_genres'
]
];
Благодаря этому, теперь во view, в переменной объекта книги мы можем получить все принадлежащие ей жанры так:
{% for genre in book.genres %}
{{ genre.genre_title }}<br>
{% endfor %}
И рассмотрим обратную ситуацию, когда нужно получить все книги, принадлежащие определённому жанру. Следовательно, в модели Genre должно быть прописано такое свойство:
public $belongsToMany = [
'books' => [
'Company\Library\Models\Book',
'table' => 'company_library_books_genres'
]
];
Во view, в переменной объекта жанра, список всех книг можно получить так:
{% for book in genre.books %}
{{ book.name }}<br>
{% endfor %}
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()