在模型测试的编辑页面上,我希望能够更新所有相关(通过hasMany)问题的“Questions.order”字段。
我已经准备好了本书中的Cake book chapter on saveMany()/saveAll(),我正在使用Model.0.field syntax
,但我无法弄清楚如何告诉CakePHP 哪个记录对应到哪个输入。 #
中的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();
表单提交并似乎保存,但更新的order
值与正确的问题记录不对应。我做错了什么?
更新:
以下是我的控制器中的order
操作:
public function admin_order() {
$data = $this->request->data;
$this->Question->saveAll($data['Question']);
$this->Session->setFlash( "Order saved.");
$this->redirect( $this->referer() );
}
答案 0 :(得分:4)
CakePHP将具有相同“索引”的所有字段关联到数据库中的单个“记录”。 'index'(即0
中的Foo.0.id
) not 与记录的'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
答案 1 :(得分:0)
As we can see at CakePHP Book, the instruction is:
// Create: id isn't set or is null
$this->Recipe->create();
$this->Recipe->save($this->request->data);
// **Update**: id is set to a numerical value
$this->Recipe->id = 2;
$this->Recipe->save($this->request->data);
考虑到2014年仍有人在寻找这个答案 你必须在中 查看:/ *(考虑$ n柜台)* /
$ this-&gt;输入('问题。'。$ n。'。订单');
$这 - &GT;输入( '问题'。$ N。 '的ID。');
控制器:$ this-&gt;问题 - &gt; updateAll-&gt;($ this-&gt; request-&gt; data ['Question']);