Я использую очень внутреннюю базу данных с приложением CakePHP, и до сих пор мои представления и контроллеры с несколькими моделями работают нормально. У меня есть единственная таблица (Entity), в которой есть id в нескольких других таблицах в качестве внешнего ключа entity_id
Некоторые таблицы являются отношениями один к одному (например, Company - это один Entity), а некоторые - один ко многим (Entity может иметь несколько Addresses) и так далее.
Я не буду / не могу изменить модель базы данных, значит, это структура.
Я использовал saveAll() для сохранения данных в этих таблицах с такими именами ввода, как:
Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city
... and so on ...
и мое сохранение все делает всю тяжелую работу, BEGIN TRANSACTION, все INSERTs и последний COMMIT ...
Но теперь я создал EntityCategory, который является отношением n к n, и создал полное отношение HABTM внутри модели.
Он работает, когда я использую save(), но только отношение HABTM, и он сохраняет все, когда я использую saveAll() (как и раньше), за исключением отношения HABTM.
Я что-то упускаю ? Как мне заставить это работать правильно? Сегодня я использую следующий код:
if (!empty($this->data)) {
$this->Entity->saveAll($this->data);
$this->Entity->save($this->data);
}
saveAll() сохраняет все данные в нескольких таблицах, сохраняет идентификатор в Entity->id, а save() сохраняет отношения HABTM, но я не уверен, правильно ли это или может ли это доставить мне проблемы, если я изменю некоторую структуру / модель.
Это лучший способ его использовать? Есть ли способ правильный сохранить эти отношения внутри CakePHP? Что может сказать мне ваш опыт / знания?





Проблема с ассоциациями saveAll () и HABTM - это известная проблема CakePHP проблема, которая не была решена в версии 1.2 RC2.
Согласно CakePHP Кулинарная книга, самые быстрые способы сохранения связанных данных модели:
"When working with associated models, it is important to realize that saving model data should always be done by the corresponding CakePHP model. If you are saving a new Post and its associated Comments, then you would use both Post and Comment models during the save operation."
Однако использование saveAll () и save () должно работать, и IMHO является более гибким / универсальным решением.
Это исправлено, если вы загрузите файл каждую ночь.
Но будьте осторожны, что-то еще может сломаться.