Извлечение ассоциаций модели в Laravel для упрощения создания / обновления

У меня есть модель фильма со следующими ассоциациями (принадлежит ToMany):
Актер
Страна
Жанр

Когда форма публикуется, у меня есть эти данные (здесь пропущено много деталей):
‘актеры’ => массив (
«Кэри Грант»,
‘Грэйс Келли’,

),
‘genres’ => array (
«Драма»,

),

Я бы хотел, чтобы моя функция контроллера update () / store () легко связывала эти модели.

Актер с именем «Кэри Грант» может существовать или не существовать, а может быть, а может и не быть связан с фильмом, который я редактирую. Также я мог бы удалить его из этого фильма, поэтому мне нужно удалить связь. То же самое с жанром и всем остальным.

Поэтому я решил сделать BaseModel и сделать все это только один раз, вот так:
1. получить определенные ассоциации модели фильма.
2. проверьте, содержат ли данные POST эти ассоциации.
3. для каждого из них проверьте, существуют ли они (если не создают их) и верните массив идентификаторов. столбец, который я проверяю, это «имя», но его можно настроить.
4. синхронизировать () эти идентификаторы.

На данный момент мне не нужно добавлять больше материала к связанной модели из формы фильма (например, дата рождения актера).

Я застрял на n.1 ($ movie-> getRelations () работает только для существующих фильмов), и в целом я не уверен, что это правильный подход. Советы?

0

Решение

Я столкнулся с той же проблемой, и это то, что я делаю в своем проекте:

  1. Вместо извлечения всех определенных отношений моделей, я добавляю в белый список отношения, которые можно обновить, добавив статический член

    Movie::$editableRelations = ['actors', 'genres', 'countries'];

  2. Переберите данные постов и сопоставьте их с $editableRelations массивы. Если данные отношения существуют, следуйте приведенным ниже шагам, в противном случае мы просто не трогаем это отношение.

Шаг 3 и шаг 4 такие же, как у вас.

0

Другие решения

используйте прямые отношения: $ модель-> актеры

http://laravel.com/docs/4.2/eloquent#relationships

Все функции sync () будут выполняться ORM, поэтому самое сложное, что вы должны сделать, это n.3. Вы должны создать diff между $ model-> актерами и $ _POST [‘актерами’] и понять, каких актеров вам нужно вставить (создать новых актеров).

1

По вопросам рекламы [email protected]