У меня есть 3 таблицы, а именно A, B и C. Все 3 из них должны использовать таблицу заметок (то есть A имеет много заметок, а примечание принадлежит A. То же самое следует для остальных 2 таблиц).
Поэтому я создал еще 3 таблицы: A_note, B_note и C_note (как уже упоминалось здесь: для нескольких таблиц требуется одно-много отношений ).
Есть ли способ выполнять операции CRUD в этих таблицах (A_note, B_note и C_note), аналогичные тому, как мы обрабатываем сводную таблицу во многих отношениях?
Пожалуйста, предложите путь вперед.
Для этого вы должны использовать polymorphic
отношения. Он позволяет нескольким моделям использовать одну таблицу.
Взгляните на документацию здесь
В вашем конкретном случае каждая из ваших таблиц будет ссылаться на столбец noteable_id
и noteable_type
.
noteable_id
будет содержать идентификатор модели (A/B/C)
.
noteable_type
будет содержать имя строки модели (A/B/C)
.
Теперь модели (A/B/C)
получат новый атрибут:
/** * (A/B/C) Model(s) */ public function notes() { return $this->morphMany('App\Notes', 'noteable'); }
И модель note
инициирует его полиморфные свойства против имени атрибута, используемого для идентификации ваших polymorphic ids and types
:
/** * Note Model */ public function noteable() { return $this->morphTo(); }
Теперь вы можете просто вызывать ->noteable
на моделях (A/B/C)
, и все они разделяют 1 таблицу без необходимости использования другой сводной таблицы для каждой таблицы.