2010-05-11 2 views
2

У меня возникли проблемы с управлением косвенно связанными моделями в cakephp. Моя текущая настройка модели выглядит следующим образом:CakePHP: недостатки с косвенно связанными моделями

Deliveries hasOne License 
License belongsTo Delivery 
License hasAndBelongsToMany Product (and vice-versa) 
License hasAndBelongsToMany ProductOption (and vice-versa) 

Я пытаюсь сохранить информацию обо всех этих моделях внутри ОДНОЙ формы. Недостатки, которые я запускаю, следующие:

  1. Форма хелпера только кажется способной видеть тип поля на одном уровне.

  2. saveAll() только кажется способным сохранить записи на один уровень глубины (для нескольких форм моделей).

Я ищу везде для решения этих вопросов, но так как я новичок в CakePHP, я не уверен, что новые методы или «правильные» методы для решения этих вопросов.

Любые советы очень ценятся. Спасибо вам всем!

EDIT: Я отправил код на неудавшуюся попытку здесь: http://bin.cakephp.org/saved/58501

+0

Не могли бы вы выслать код из вашей формы? И что означает лицензия в этом случае? – jimiyash

+0

Моя компания обычно выполняет физическую «доставку» программного обеспечения «лицензия», которая позволяет клиенту запускать различные типы программных продуктов, которые они приобрели, вместе с приобретенными «вариантами продукта». – Dan

ответ

0

SaveAll() только кажется, в состоянии сохранить записи на один уровень (для нескольких типовых форм).

В прошлом я наткнулся на это ограничение и выбрал в то время его работу, разбив мою форму на несколько меньших форм.

Следует иметь в виду, что при использовании таблиц saveAll и InnoDB вы получаете атомарные транзакции, так как Cake будет выполнять откат, если он не сможет зафиксировать изменения в базе данных.

Итак, хотя вы, очевидно, можете обойти проблему несколькими строками своего собственного кода (так как Cake's saveAll one-liner не оправдывает ожиданий), вам придется тратить больше времени, если транзакции являются требованием ,

0

Привет, я знаю, что это старое сообщение, но я думал, что опубликую это, чтобы помочь другим. С CakePHP 2.1 вы можете сохранить несколько уровней ассоциации моделей, используя опцию для вызова saveAll(), более подробно здесь: http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-1.html#model-saveall-model-saveassociated-model-validateassociated

Пример:

$this->MyModel->saveAll($this->request->data, array('deep'=>true)); 

Что касается ограничения FormHelper, я как потерянный, как вы, я, вероятно, прибегать к настройке типов ввода вручную, так как мои поля не нужно слишком много проверки.

Смежные вопросы