Вопрос

Я использую очень встроенную базу данных с приложением 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, все INSERTи финал 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. Кулинарная книга:

«При работе со связанными моделями важно понимать, что сохранение данных модели всегда должно выполняться соответствующей моделью CakePHP.Если вы сохраняете новую публикацию и связанные с ней комментарии, во время операции сохранения вам следует использовать обе модели публикации и комментария».

Однако использование saveAll() и save() должно работать, и ИМХО является более гибким/универсальным решением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top