我有一个发送到我的控制器的数组,例如:
$array = array(
[0]=>array(
[id]=>5,
[position]=>6
),
[1]=>array(
[id]=>8,
[position]=>2
)
);
我需要使用其ID保存每个项目的位置。在cakePHP中执行此操作的最佳方法是什么?我只能想象循环更新函数或拉动整个数据库,更改正确的值,然后保存数据库。这两个想法似乎都很难实现。
答案 0 :(得分:4)
如果您的数组包含'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()条目。
答案 1 :(得分:2)
您是否尝试过CakePHP的saveAll()
? Details here