#cakephp #has-and-belongs-to-many
#cakephp #имеет и принадлежит многим
Вопрос:
Я понял, что каждая новая строка приводит к удалению строк, которые были там раньше?
В чем идея, стоящая за этим? Я не верю, что это так..
Итак, в чем я ошибаюсь?
Редактировать A
У меня есть форма, которая добавляет хранилище в Stores
таблицу. в хранилище есть столбец с именем, owner_id
который связан с Users
таблицей через отношение belongsTo.
Существует также таблица с именем stores_users
, которая должна хранить менеджеры для каждого хранилища, используя связь HABTM.
Для этой таблицы есть форма с полем электронной почты, которая соединяет пользователя с хранилищем путем сохранения записи непосредственно в stores_users
таблицу.
Итак, нигде нет полного сохранения HABTM, если я правильно понимаю термин.
Итак, мои вопросы:
- Должен ли я ожидать проблем при его использовании таким образом?
- Можете ли вы посоветовать мне, как это сделать, если мой метод не подходит должным образом?
- Как я могу использовать сохраненные данные, используя
$this->User->find(...)
для получения всех хранилищ, которыми может управлять пользователь?
Ответ №1:
да, это поведение HABTM по умолчанию в cakephp, хотя это не для «каждой строки», а для «каждого сохранения HABTM».
это работает, ЕСЛИ вы всегда предоставляете все значения HABTM. и с обработанными представлениями в соответствии со спецификациями для такого HABTM все это работает «из коробки».
если вы измените поведение по умолчанию (старые файлы не удаляются), вам нужно будет убедиться, что дубликатов нет. я думаю, что существуют модели поведения, которые пытаются достичь этого. но я бы порекомендовал вам создавать свои формы таким образом, чтобы поведение cake по умолчанию могло выполнять свою работу.
Пример:
ЭТО: 1,3,6 (в базе данных для этого ключа)
НОВОЕ: 2,3,6 (взято из формы)
(cake удаляет 1,3,6 и добавляет 2,3,6)
=> общий результат (забывая о разных первичных ключах): «1» удалено, «2» добавлено
так что, возможно, это не самый экономящий ресурсы способ, но, несомненно, самый простой и быстрый.
Комментарии:
1. Спасибо @mark, мне нужна дополнительная помощь в этом вопросе — пожалуйста. Я отредактирую вопрос и добавлю свои вопросы в edit (A).