5

モデル Test の編集ページで、同じフォームから関連付けられている (hasMany による) すべての質問の「Questions.order」フィールドを更新できるようにしたいと考えています。

私は本の中のsaveMany ( )/saveAll() に関する Cake の本の章を準備しまし。は質問の id フィールドに対応する必要がありますか? これが私が現在行っていることです:Model.0.field syntax#Model.#.field

 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() );
}
4

2 に答える 2

4

CakePHP は、すべてのフィールドを同じ「インデックス」に関連付けて、データベース内の単一の「レコード」にします。「インデックス」(つまり0in Foo.0.id) は、レコードの「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モデルを介して 2 つの行を更新します。

テーブル 'foo';

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

あなたのコードは、各行に同じ'id' ( ) を使用しているようです。これはおそらく、それらのレコードを更新するための正しい ID ではありません$qset['Qset']['id']

于 2013-04-21T18:08:50.860 に答える