3

次のコマンドで行を更新しようとしているのですが、CakePHP は常に節に a'1'を入れます。WHERE

# the PHP command
$this->Administrator->id = $id; # id = 6, it wasn't changed
$this->Administrator->save($this->request->data);

-- simplified version of the generated SQL
UPDATE `someTable`  SET `someField` = 'value', `id` = '6' WHERE `id` = '1'

id更新部分の生成された SQL では正しいが、句では正しくないことは興味深いことです。WHEREはい、id列はテーブルの主キーです。CakePHP の最新バージョンを使用しています。

私が間違っていることは何ですか?句のid中でどのようにすることができますか?WHERE6

編集: Bake で生成されたコードと同じ結果が得られます。モデルまたはデータベースに問題がある可能性がありますか?

編集 2:すべてのクエリをログに記録しています。更新を試みる前に、CakePHP はいくつかSELECT count(*)を実行し、WHERE id = 6.

編集 3:挿入、削除、および読み取りは正常に機能します。


最終更新: 問題が解決しました

何が起こったのかわかりませんが、問題は解決したと思います。

まず、Bake で生成されたコードで更新が機能しませんでした。

次に、管理者の更新のみが機能していません。他のすべては問題ありません。

administrators3 番目に、問題はテーブル内の列から発生したadministratorsと思いますTINYINT(1)。列名をadministrators_areaに変更し、いくつかのコードも変更しましたが、すべて機能しました。

この列が競合を引き起こしていると思います。そのため、UPDATE が機能していませんでした。これを試す前に、テーブル名を変更しusersて列を維持するようにしましたが、これadministratorsも機能しました。

問題が同じ名前のテーブル名とテーブル列の競合ではなかった場合、名前を変更した後に問題が解決したのは非常に偶然でした。

4

2 に答える 2

1

代わりにこれを試してください:

$this->request->data['Administrator']['id'] = $id; // <-- Line changed
$this->Administrator->save($this->request->data);
于 2012-12-04T13:23:52.283 に答える
0

この送信をフォームから作成していますか? ビューのフォームには何がありますか? 私の最初の推測では、更新する Model オブジェクトを CakePHP に伝える id の隠し入力を含めることを怠っているのではないでしょうか。

echo $this->Form->input('id',array('type' => 'hidden'));

これらの関数を呼び出すと、どのようなデータを受け取りますか?

debug($this->request->data);
debug($this->Administrator);

フォーム自体に問題がない場合、 ID=1 は実際には残留データまたは未設定のモデルからのみ取得する必要があるため、疑わしいと思います。

于 2012-12-04T14:05:00.433 に答える