CakePHP HABTM, я все неправильно понимаю?

#cakephp #has-and-belongs-to-many

#cakephp #имеет и принадлежит многим

Вопрос:

Я понял, что каждая новая строка приводит к удалению строк, которые были там раньше?

В чем идея, стоящая за этим? Я не верю, что это так..
Итак, в чем я ошибаюсь?


Редактировать A

У меня есть форма, которая добавляет хранилище в Stores таблицу. в хранилище есть столбец с именем, owner_id который связан с Users таблицей через отношение belongsTo.

Существует также таблица с именем stores_users , которая должна хранить менеджеры для каждого хранилища, используя связь HABTM.

Для этой таблицы есть форма с полем электронной почты, которая соединяет пользователя с хранилищем путем сохранения записи непосредственно в stores_users таблицу.
Итак, нигде нет полного сохранения HABTM, если я правильно понимаю термин.

Итак, мои вопросы:

  1. Должен ли я ожидать проблем при его использовании таким образом?
  2. Можете ли вы посоветовать мне, как это сделать, если мой метод не подходит должным образом?
  3. Как я могу использовать сохраненные данные, используя $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).