0

ユーザーがABCというモデルのエントリを編集できる編集ビューを作成しようとしています。ユーザーが特定の行の編集マスクを開くとすぐに、その行をロックする必要があります。これを行うデータベースに「locked」というtinyint(1)値があります。これがコードの一部です。それはsaveFieldメソッドで発生します、私はすでにそれをチェックしました。正しいレコードで値が変更されているので、奇妙です!しかし、どういうわけかそれは同じタスクを2回実行しようとします、そして私は理由がわかりません。

function edit($id = null) {

    // select the 
    $this->ABC->id = $id;
    $session = $this->Session->read();


    $this->set('locked',false);


    // save or read the data
    if (empty($this->data)) {
        $this->data = $this->ABC->read();

        // locking
        if ($this->data["ABC"]["locked"] == true) {
            $this->set('usercanedit', false);
            $this->set('locked', true);
        } else {
            $this->ABC->saveField('locked', true);
        }
   }
 }

saveFieldコードをこれに置き換えると(もちろん愚かでテスト用です)、機能します。これはどういうわけか、editメソッドが2回呼び出されたことを証明しています。パラメータがない場合、またはパラメータが間違っている場合。

if($this->ABC->id == 13)
  $this->ABC->saveField('locked', true);

誰かがアイデアを持っていますか?

4

1 に答える 1

1

本に書かれているように、saveField呼び出しの直前にIDを設定してみてください。

saveField()を呼び出す直前に、モデルのID($ this-> ModelName-> id = $ id)を設定します。

あなたの場合:

} else {
    $this->ABC->id = $id; // ID should be set right before the saveField call
    $this->ABC->saveField('locked', true);
}
于 2012-04-25T19:27:37.057 に答える