1

そのため、何らかの理由で、beforeSave コールバックでデータに対して行うことはすべて、単一のレコードでは機能しますが、saveMany を使用すると機能しません。

何を与える?私が次のことをした場合:

public function beforeSave() {
    $this->data['foo'] = 'bar'
    die($this->data);
}

実際、$this->data は変更されますが、saveMany はそれを無視し、代わりに元のデータを保存することがわかります。

4

1 に答える 1

3

$ this-> dataを操作するときは、モデル名を必ず含めてください。たとえば、$ this-> data ['Event'] ['foo']=barです。メソッドもtrueを返すことを確認してください。そうでない場合、保存は失敗します。


編集

簡単な例を作成しましたが、うまく機能しているようです。以下のコードを参照してください。私の疑いは、saveManyを誤って呼び出して、$ this-> request-> dataオブジェクト全体を渡しているのではないかと思いますが、呼び出しも表示せずに推測するのは困難です。

意見

<?php echo $this->Form->create('ParentTable'); ?>
    Record 1: <br />
    <?php echo $this->Form->input('ParentTable.0.name'); ?>

    Record 2: <br />
    <?php echo $this->Form->input('ParentTable.1.name'); ?>
<?php echo $this->Form->end('Submit'); ?>

コントローラ

public function index() {
    if ($this->request->data) {
        $this->ParentTable->saveMany($this->request->data['ParentTable']);
    }
}

モデル

public function beforeSave() {
    $this->data['ParentTable']['name'] .= ' modified';
    return true;
}
于 2012-06-05T22:57:33.743 に答える