Обновить поля из массива с помощью CakePHP - PullRequest
2 голосов
/ 09 июня 2011

У меня есть массив, который отправляется на мой контроллер, например:

$array = array(
        [0]=>array(
             [id]=>5,
             [position]=>6 
        ),
       [1]=>array(
             [id]=>8,
             [position]=>2 
        )
);

И мне нужно сохранить позицию каждого элемента, используя его идентификатор. Каков наилучший способ сделать это в cakePHP? Я могу только представить себе зацикливание функции обновления или извлечение всей базы данных, изменение правильных значений и сохранение базы данных. Обе идеи кажутся очень пышными.

Ответы [ 2 ]

4 голосов
/ 09 июня 2011

Ха, Торт магии на помощь снова. Вам не нужно говорить Cake, чтобы сохранить его по id. Есть большой длинный удивительный способ, которым Cake делает это, но короткий и худой -

если ваш массив содержит ключ 'id', Cake предполагает, что это первичный ключ таблицы, и генерирует инструкцию UPDATE вместо INSERT. Выглядит так:

UPDATE table as Table SET Table.position = $position WHERE Table.id = $id;

И, Cake знает, что итерировать для вас, если вы используете saveAll () вместо save ():

$this->Model->saveAll($array);

Если у вас есть какие-либо обратные вызовы сохранения в вашей модели, например beforeSave (), вы должны вызывать их вручную перед вызовом saveAll () - они запускаются только при save (), а не saveAll () или updateAll ().

Вы хотите добавить в свой массив имя вашей модели ($ array ['Model'] [0], $ array ['Model'] [1] и т. Д.). Если вам нужно волшебным образом сохранитьAll () с несколькими моделями, вы добавляете в свой массив индексированные ключи, а затем имена моделей - например, $ array [0] ['Model1'], $ array [0] ['Model2']) и Cake знает сохранить / обновить связанные данные для всех моделей в каждой партии индекса.

Торт делает ВСЕ работу за вас:

http://book.cakephp.org/view/1031/Saving-Your-Data - особенно запись saveAll ().

  • Редактировать - и превратить ваш массив в название вашей модели? Торт делает это до смешного легким. Проверьте встроенную в Cake библиотеку Set для всех ваших потребностей в манипуляциях с массивами / объектами.

http://book.cakephp.org/view/1487/Set

2 голосов
/ 09 июня 2011

Вы пробовали CakePHP saveAll()? Подробности здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...