eme*_*his 5 php cakephp cakephp-2.0 cakephp-2.1
在模型测试的编辑页面上,我希望能够更新来自同一表单的所有相关(通过 hasMany)问题的“Questions.order”字段。
我已经准备好了关于 saveMany()/saveAll()的Cake book 章节,我正在使用它,Model.0.field syntax但我不知道如何告诉 CakePHP哪个记录对应于哪个输入。#in应该Model.#.field对应问题的 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();
Run Code Online (Sandbox Code Playgroud)
表单提交并似乎保存,但更新的order值与正确的问题记录不对应。我究竟做错了什么?
更新:
这是order我的控制器中的操作:
public function admin_order() {
$data = $this->request->data;
$this->Question->saveAll($data['Question']);
$this->Session->setFlash( "Order saved.");
$this->redirect( $this->referer() );
}
Run Code Online (Sandbox Code Playgroud)
CakePHP 将具有相同“索引”的所有字段关联为数据库中的单个“记录”。“索引”(即0in Foo.0.id)与记录的“id”没有任何关系,它只是一个数字。
例如;
Foo.0.id = 123
Foo.0.name = 'hello';
Foo.1.id = 124
Foo.1.name = 'world';
Run Code Online (Sandbox Code Playgroud)
正如我的答案开头提到的,索引本身并不重要,这段代码将执行完全相同的操作:
Foo.12345.id = 123
Foo.12345.name = 'hello';
Foo.54321.id = 124
Foo.54321.name = 'world';
Run Code Online (Sandbox Code Playgroud)
只要同一记录的字段具有相同的“索引”,CakePHP 就会理解它们属于“在一起”。
提交此数据并保存时使用;
$this->Foo->saveMany($this->data['Foo']); // Just $this->data will probably work as well
Run Code Online (Sandbox Code Playgroud)
CakePHP 通过模型更新两行Foo;
表“foos”;
id name
------------------------
123 hello
124 world
Run Code Online (Sandbox Code Playgroud)
您的代码似乎对每一行使用相同的“id”( $qset['Qset']['id']),这可能不是更新这些记录的正确 ID
| 归档时间: |
|
| 查看次数: |
11691 次 |
| 最近记录: |