0

CakePHP 2.3.1 で行を更新しようとしています。クラス Test で AppModel を $validates 配列で拡張し、Controller( simple ) を使用しています。

public function editstudent()   {
    if($this->request->data)    {
        $this->Test->stuId= $this->data['Test']['stuId'];
        if ($this->Test->save($this->request->data))    {
            $this->set('state',1);
        }
    }

その本には次のように書かれていました。

作成または更新は、モデルの id フィールドによって制御されます。$Model->id が設定されている場合、この主キーを持つレコードが更新されます。それ以外の場合は、新しいレコードが作成されます:

上記のように $this->Test->StuId を設定しましたが、フォームを送信すると次のように表示されます:

エラー: SQLSTATE[23000]: 整合性制約違反: 1062 キー 'PRIMARY' の重複エントリ '' SQL クエリ: INSERT INTO ........

エラーが示したように、クエリはまだ UPDATE ではなく INSERT です。更新するにはどうすればよいですか。pls は私を助けてくれます :(

EDIT:@thaJeztah私は自分のビューを次のように編集しました:

class Test extends AppModel {
var $name= 'Test';
var $primaryKey= 'stuId';
public $validate= array(.......);
}

しかし、それはまだ同じ問題を示しています

データベース エラー エラー: SQLSTATE[23000]: 整合性制約違反: 1062 キー 'PRIMARY' SQL クエリのエントリ '' が重複しています: INSERT INTO cakePhptests( stuName, stuDoB, stuAdd) VALUES ('Đào Đức Anh', '2013-03-25', 'Kim Liên')

ご覧のとおり、クエリはまだ UPDATE ではなく INSERT です。

4

1 に答える 1

2

CakePHP の規則に従っていないため ( CakePHP モデルの規則を参照してください)、モデルに使用する主キーおよび/またはデータベース テーブルを手動で指定する必要があります。

class Test extends AppModel {
    public $primaryKey = 'studId';
}

また、「Test」は予約名であり、モデルの適切な名前ではないのではないかと思います。

ただし、これが新しいプロジェクトである場合は、CakePHP の規則に固執することを強くお勧めします。規則には理由があり、このフレームワークを使用して開発する際の作業がずっと簡単になります。

update$useTable OPによるコメントに基づい てプロパティを削除しました

于 2013-03-22T07:28:33.330 に答える