CakePHP hasAndBelogsToMany с использованием save () и saveAll () - PullRequest
1 голос
/ 29 сентября 2008

Я использую очень встроенную базу данных с приложением 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? Что ваш опыт / знания могут сказать мне?

Ответы [ 2 ]

1 голос
/ 18 ноября 2008

Это исправлено, если вы загружаете nightly .

Будьте осторожны, что-то еще может сломаться.

0 голосов
/ 29 сентября 2008

Проблема с ассоциациями saveAll () и HABTM - это известная проблема CakePHP , которая не была решена в версии 1.2 RC2.

В соответствии с CakePHP cookbook :

настолько быстро, насколько это возможно.

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

Однако использование saveAll () и save () должно работать, и IMHO - более гибкое / универсальное решение.

...