ホーム > > CakePHP の updateAll() で Boolean 型を update しようとしたらハマったお話し

CakePHP の updateAll() で Boolean 型を update しようとしたらハマったお話し

タイトルどおりなんだけど,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)truestr_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 の偶感録 より

ホーム > > CakePHP の updateAll() で Boolean 型を update しようとしたらハマったお話し

Twitter: clotho_moirai

ページの上部に戻る