- 2011/12/10 20:59
- 軟
タイトルどおりなんだけど,CakePHP 1.2.10 の話ね。
以下で true として渡してるところがキモ。
< ?php
$delete_conditions = array(
'Post.id' => $post_ids,
);
$this->updateAll(array('Post.is_deleted' => true), $delete_conditions);
?>
DB で Boolean のカラムなので PHP の Boolean 型を渡すと失敗する。
DboSource::_prepareUpdateFields() の中で,(Boolean)true を str_replace() で置換しようとしてるところがあって,PHP のステキ自動キャストのせいで (Boolean)true -> (Integer)1 -> (String)'1' みたいに変化してるらしくて,最終的に発行される SQL クエリがおかしくなる。
以下のようにすればオッケー。
< ?php
$delete_conditions = array(
'Post.id' => $post_ids,
);
$this->updateAll(array('Post.is_deleted' => 'true'), $delete_conditions);
?>
'true' と文字列で渡すのがキモ。
他のメソッドは PHP の Boolean で渡せるのに。まったくもー。
1.3 系だと直ってるのか? 2.0 が proof されるまで待つつもりなんだけどな。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://kagura-c.info/blog/2011/12/10/failed_to_update_boolean_value_with_updateall/trackback/
- トラックバックの送信元リスト
- CakePHP の updateAll() で Boolean 型を update しようとしたらハマったお話し - Clotho の偶感録 より