Ха, Торт магии на помощь снова. Вам не нужно говорить 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