dongxun6690
2011-06-09 17:17
浏览 25
已采纳

使用CakePHP更新数组中的字段

I have an array that is sent to my controller, such as this:

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

And I need to save the position of each item using its id. What is the best way to do this in cakePHP? I can only imagine looping an update function or pulling the entire database, changing the correct values, then saving the database. Both ideas seem very bodged.

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • doudongdang4483 2011-06-09 17:40
    已采纳

    Ha, Cake magic to the rescue again. You don't have to tell Cake to save it by id. There's a big long amazing way Cake does this, but the short and skinny is -

    if your array contains an 'id' key, Cake presumes it is the table primary key and generates an UPDATE statement instead of an INSERT. Looks like this:

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

    And, Cake knows to iterate for you if you use saveAll() instead of save():

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

    If you have any save callbacks in your model, such as beforeSave(), you have to call them manually before calling saveAll() - they only autofire on save(), not saveAll() or updateAll().

    You'll want to top your array with the name of your model ($array['Model'][0], $array['Model'][1], etc). If you need to magically saveAll() with multiple models, you top your array with indexed keys, then model names - like $array[0]['Model1'], $array[0]['Model2']) and Cake knows to save / update the associated data for all the models in each index batch.

    Cake does ALL the legwork for you:

    http://book.cakephp.org/view/1031/Saving-Your-Data - especially the saveAll() entry.

    • Edit - and topping your array with your model name? Cake makes that ridiculously easy, too. Check out Cake's built-in Set library for all your array / object manipulation needs.

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

    已采纳该答案
    打赏 评论
  • duanrang2627 2011-06-09 17:26

    Have you tried CakePHP's saveAll() ? Details here.

    打赏 评论

相关推荐 更多相似问题