ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

CakePHP:如何使用Form帮助程序同时更新多个记录

2019-06-25 09:26:31  阅读:244  来源: 互联网

标签:php cakephp cakephp-2-0 cakephp-2-1


在模型Test的编辑页面上,我希望能够在同一表单中更新所有相关(由hasMany)问题的“Questions.order”字段.

我已经准备好了本书中的Cake book chapter on saveMany()/saveAll(),我正在使用Model.0.field语法,但我无法弄清楚如何告诉CakePHP哪个记录对应哪个输入.模型#.字段中的#是否应该与问题的id字段对应?这是我目前正在做的事情:

 echo $this->Form->create( 'Question', array('action'=>'order'));

$n = 0;
foreach ($questions_array as $question) : ?>
        <?php echo $this->Form->input('Question.'.$n.'.order' ); ?>
        <?php echo $this->Form->input('Question.'.$n.'.id', array('type'=>'hidden', 'value'=>$question['Question']['id']) ); ?>
        <input type="submit" value="Save" />
...
$n++;
endforeach;
$this->Question->Form->end();

表单提交并似乎保存,但更新的订单值与正确的问题记录不对应.我究竟做错了什么?

更新:

这是我的控制器中的订单操作:

public function admin_order() {
    $data = $this->request->data;
    $this->Question->saveAll($data['Question']);
    $this->Session->setFlash( "Order saved.");
    $this->redirect( $this->referer() );
}

解决方法:

CakePHP将所有具有相同“索引”的字段关联到数据库中的单个“记录”. ‘index'(即Foo.0.id中的0)与记录的’id’没有任何关系,它只是一个数字.

例如;

Foo.0.id   = 123
Foo.0.name = 'hello';
Foo.1.id   = 124
Foo.1.name = 'world';

正如我在回答的开头所提到的,索引本身并不重要,这段代码将完全相同:

Foo.12345.id   = 123
Foo.12345.name = 'hello';
Foo.54321.id   = 124
Foo.54321.name = 'world';

只要同一记录的字段具有相同的“索引”,CakePHP就会明白它们属于“在一起”.

提交此数据并使用时保存;

$this->Foo->saveMany($this->data['Foo']); // Just $this->data will probably work as well

CakePHP通过Foo模型更新两行;

表’foos’;

id     name
------------------------
123    hello
124    world

您的代码似乎对每行使用相同的’id'($qset [‘Qset’] [‘id’]),这可能不是更新这些记录的正确ID

标签:php,cakephp,cakephp-2-0,cakephp-2-1
来源: https://codeday.me/bug/20190625/1284732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有