次のコマンドで行を更新しようとしているのですが、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
中でどのようにすることができますか?WHERE
6
編集: Bake で生成されたコードと同じ結果が得られます。モデルまたはデータベースに問題がある可能性がありますか?
編集 2:すべてのクエリをログに記録しています。更新を試みる前に、CakePHP はいくつかSELECT count(*)
を実行し、WHERE id = 6
.
編集 3:挿入、削除、および読み取りは正常に機能します。
最終更新: 問題が解決しました
何が起こったのかわかりませんが、問題は解決したと思います。
まず、Bake で生成されたコードで更新が機能しませんでした。
次に、管理者の更新のみが機能していません。他のすべては問題ありません。
administrators
3 番目に、問題はテーブル内の列から発生したadministrators
と思いますTINYINT(1)
。列名をadministrators_area
に変更し、いくつかのコードも変更しましたが、すべて機能しました。
この列が競合を引き起こしていると思います。そのため、UPDATE が機能していませんでした。これを試す前に、テーブル名を変更しusers
て列を維持するようにしましたが、これadministrators
も機能しました。
問題が同じ名前のテーブル名とテーブル列の競合ではなかった場合、名前を変更した後に問題が解決したのは非常に偶然でした。