0

別のモデルの拡張であるさまざまなモデルがあります。

classes (SubModel1, SubModel2, ..,6) extends -> HighModel extends -> Appmodel

各サブモデルにデータを保存するたびに、HighModel で関数を呼び出して、保存したばかりのサブモデルの ID を保存します。
5 つのサブモデルで完全に動作しますが、1 つの id は常に:
($shouldBeThisId - 1)追加機能と編集機能の両方で.... o_O

これが私の追加機能です:

    public function add() {
    if ($this->request->is('post')) {
        $this->M18Tab->create();
        if ($this->M18Tab->save($this->request->data)) {
            $data = $this->M18Tab->findById($this->M18Tab->id); //<---problem's here
            if($this->M18Tab->M18Model->saveVersion($data)){
                $this->Session->setFlash(__('The m18 tab has been saved'));
                $this->redirect(array('action' => 'view', $this->M18Tab->id));
            } else {
                $this->Session->setFlash(__('Error with versioning system'));
            }
        } else {
            $this->Session->setFlash(__('The m18 tab could not be saved. Please, try again.'));
        }
    }
    //view variables
}

わかった。保存した後、「保存したばかりのデータ」を呼び出してに渡します$this->SubModel->HighModel->saveVersion($data)。奇妙なことに、ID を強制的に検索しようとすると、次のようになります。

$data = $this->M18Tab->findById(33);

挿入されたばかりの ID :0 の前の ID も検索されます。

これは何が原因でしょうか?コードは6つのモデルすべてで同じですが、この問題が発生したのは1つだけです..

4

1 に答える 1

0

これは答えというよりもコメント/提案ですが、とにかく...

新しいレコードを追加する場合、save を呼び出した後、次の方法でその ID を取得できます。

$this->MyModel->getInsertId();

クックブックでそのメソッドを参照してください。ID は $this->MyModel->id でも利用できるはずですが、この場合は機能しないため、次のことを試してみてください。

$data = $this->M18Tab->findById($this->M18Tab->getInsertId());
于 2013-08-08T00:34:29.313 に答える