CakePHP: недостатки с косвенно связанными моделями - PullRequest
2 голосов
/ 11 мая 2010

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

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

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

  1. Похоже, что помощник по форме может видеть тип поля только на один уровень глубиной.

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

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

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

РЕДАКТИРОВАТЬ: я отправил код моей неудачной попытки здесь: http://bin.cakephp.org/saved/58501

Ответы [ 2 ]

0 голосов
/ 01 июля 2014

Привет, я знаю, что это старая публикация, но я решил опубликовать ее, чтобы помочь другим. Начиная с CakePHP 2.1, вы можете сохранить несколько уровней ассоциации моделей, используя опцию вызова saveAll (), подробнее здесь: 1001 *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, я потерян так же, как и вы, вероятно, я прибегну к настройке типов ввода вручную, поскольку мои поля не требуют слишком большой проверки.

0 голосов
/ 12 мая 2010

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

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

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

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

...