CakePHPでupdateAllを使うとエラーが出る場合の対処方法
CakePHPを使い始めて2日目ですが、データベースに問い合わせる際、まともにSQL文を書く機会は今のところなく、ほとんどが抽象化された機能だけで済んでいます。findメソッドやsaveメソッドがその代表例。
テーブルをupdateしたい場合やinsertしたい場合は、saveメソッドひとつで済むみたいですが、どうも自分の試している状況ではうまく動かなかったので調べてみました。すると、ある事実が判明。
updateAllはクォート処理、サニタイズ処理をしてくれないから自分でする必要あり!
例えば
user_id, content_id, memotext, created というカラムを持つテーブルの更新を考えます。 主キーはuser_id, content_idの複合キーです。
この場合、ふつうに考えると下記のような感じで動くかと思われます。
//wrong sample $data = array('memotext'=>$memotext, 'created'=>date('Y-m-d H:i:s')); $conditions = array('user_id'=>$user_id, 'content_id'=>$content_id); $this->modelname->updateAll($data,$conditions);
ですが、これでは動きません。
答えはこうです。
//right sample $data = array('memotext'=>"'".$memotext."'", 'created'=>"'".date('Y-m-d H:i:s')."'"); $conditions = array('user_id'=>$user_id, 'content_id'=>$content_id);//条件文はそのままでOK $this->modelname->updateAll($data,$conditions);
ということでまとめると、saveメソッドでは済まされない場合があり、その場合はupdateAllを使用する、そしてupdateAllを使用する際はダブルクォーテーションやシングルクォーテーションで囲ってやる必要がある、というメモでした。
そして条件文は気を使わなくてOKというところも、初めてCakePHPを触るひとにはわかり得ないところですね。
こんなにCakeの情報はあふれているのに意外に見つからなかったのでメモを残した次第です...。
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2017/01/14
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/03/17
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 渡辺一宏,吉羽龍太郎,岸田健一郎,穴澤康裕
- 出版社/メーカー: インプレス
- 発売日: 2015/01/14
- メディア: Kindle版
- この商品を含むブログを見る
Webアプリ開発を加速する CakePHP2定番レシピ119
- 作者: 長谷川智希,デジタルサーカス
- 出版社/メーカー: 秀和システム
- 発売日: 2013/09/28
- メディア: 単行本
- この商品を含むブログ (1件) を見る