Я пытаюсь окунуться в свои первые полиморфные отношения в Laravel 5.3.Полиморфные отношения Laravel 5.3
Отношения, которые я пытаюсь достичь, - это то, что «Редакция» будет иметь множество «Элементов», каждый элемент будет его собственной моделью и иметь заказ.
Так, например, у меня будут модели «ElementText», «ElementImage», «ElementButton», тогда «Редакция» будет иметь различные элементы, назначенные ей.
Вот почему я думаю, что мне нужны полиморфные отношения. Мне не нужны множественные отношения для каждого типа элемента в модели «Редакторы», я хочу иметь возможность просто получить все «Элементы» независимо от его типа и привести его в порядок.
Я думаю, что идея решение будет иметь «editorial_element» сводную таблицу со столбцами, как
editorial_id - integer
order - integer
element_id - integer
element_type - string
аналогично morphToMany
например, в Laravel документации, но в этом примере необходимо указать модель для превращаться.
Так что я также задавался вопросом, должен ли я использовать метод morphTo() в моей редакции.
public function elements() {
return $this->morphTo();
}
Но я думаю, что это означает, что я должен был бы добавить _type
и _id
столбцы моей передовиц таблицы, которая будет в обратном направлении (что позволяет одному элементу за редакционные)
Любая идея, если я могу установить отношения я требовать или я подхожу к нему неправильно?
Понял, правда ли, думая, что модель «элементов» потребуется обновить вручную и больше не будет принимать методы attach(), detach(), используя этот подход? –
'BelongsTo()' имеет 'associate()' и 'disassociate()', но я не могу представить себе ситуацию, когда вы будете манипулировать этими отношениями после их создания. Единственное, что я мог видеть в изменении, было бы «Редакционный - hasMany - Element», к сожалению, для этого не существует метода «sync()», но вы можете 'saveMany()'. –
Я быстро перешел к этому подходу, прежде чем отправляться домой с работы раньше. Я не использовал представление, но сделал следующее: $ editorial = \ App \ Editorials :: with ('elements') -> first(); foreach ($ editorial-> elements as & $ elements) { \t \t $ elements-> content; \t}. Удивительно, как это влияет на производительность. –