Что делать, когда HABTM усложняется?
По умолчанию при сохранении отношения HasAndBelongsToMany Cake удаляет все строки в объединяемой таблице перед сохранением новых. Например, если у вас есть клуб, в котором есть 10 детей. Затем вы обновите клуб с 2 детьми. Клуб будет иметь только 2 детей, а не 12.
Также обратите внимание, что если вы хотите добавить больше полей в объединение (когда оно было создано или метаданные), это возможно с помощью таблиц соединения HABTM, но важно понимать, что у вас есть простой вариант.
HasAndBelongsToMany между двумя моделями в действительности является сокращением для трех моделей, связанных как с hasMany, так и с принадлежащим ассоциацией.
Рассмотрим этот пример:
Child hasAndBelongsToMany Club
Еще один способ взглянуть на это - добавить модель членства
Child hasMany Membership
Membership belongsTo Child,
ClubClub hasMany Membership.
Эти два примера почти одинаковы. Они используют одинаковое количество и именованные поля в базе данных и одинаковое количество моделей. Важные различия заключаются в том, что модель «соединения» названа по-разному, и ее поведение более предсказуемо.
В вашем примере вам нужен способ добавлять и удалять без редактирования других пользователей ссылки на видео, поэтому стандартный habtm вам не очень подойдет. Создайте модель для этого «соединения», аналогичную модели членства, описанной выше. Кроме того, если вы добавили поле веса, вы могли бы использовать упорядоченное поведение (которое я написал), чтобы упорядочить каждый набор видео для каждой корзины. Тогда вы будете использовать следующие поля
id, bin_id, video_id, weight
И установите bin_id как 'foreign_key' в конфигурации поведения. Удачи