使用CakePHP更新数组中的字段

时间:2011-06-09 17:17:20

标签: php cakephp

我有一个发送到我的控制器的数组,例如:

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

我需要使用其ID保存每个项目的位置。在cakePHP中执行此操作的最佳方法是什么?我只能想象循环更新函数或拉动整个数据库,更改正确的值,然后保存数据库。这两个想法似乎都很难实现。

2 个答案:

答案 0 :(得分:4)

哈,蛋糕魔法再次救援。您不必告诉Cake通过id保存它。 Cake有一个很长的惊人方式,但是短而瘦的是 -

如果您的数组包含'id'键,Cake假定它是表主键并生成UPDATE语句而不是INSERT。看起来像这样:

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

而且,如果您使用saveAll()而不是save(),Cake会知道为您迭代:

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

如果模型中有任何保存回调,例如beforeSave(),则必须在调用saveAll()之前手动调用它们 - 它们只在save()上自动调用,而不是saveAll()或updateAll()。

您需要使用模型名称($ array ['Model'] [0],$ array ['Model'] [1]等)来填充数组。如果您需要使用多个模型神奇地保存所有(),那么您可以使用索引键来填充数组,然后使用模型名称 - 例如$ array [0] ['Model1'],$ array [0] ['Model2'])并且Cake知道保存/更新每个索引批次中所有模型的关联数据。

Cake会为你做所有的腿部工作:

http://book.cakephp.org/view/1031/Saving-Your-Data - 尤其是saveAll()条目。

  • 编辑 - 并使用您的型号名称填充数组?蛋糕也让人觉得非常容易。查看Cake的内置Set库,以满足您的所有数组/对象操作需求。

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

答案 1 :(得分:2)

您是否尝试过CakePHP的saveAll()Details here