2009年6月4日木曜日

Zend_Db_Tableのデータ登録時にNullを設定する

今更ながらZend_Db_Tableのinxert()やupdate()をする時にデータをNullとして更新する方法がわかったので記録。

普通に値にNullを設定してもNullではなくて''(空文字)となってしまうとこがポイント。登録先のカラムが数値などの場合に''ではエラーが起きてしまう。なので、長いこと悩んでましたが、ふと思いついてDb周りのソースを覗いてみたらうまい方法を見つけました。


Zend_Frameworkの例にして、どうするかと言うと

$table = new Bugs();
$data = array(
  'created_on'      => '2007-03-22',
  'bug_description' => 'Something wrong',
  'bug_status'      => 'NEW',
  'bug_null'      => new Zend_Db_Expr('null')

$table->insert($data);

まー大した事じゃないんだけどさ。

Zend_Db_Exprのインスタンスを作って設定。insertやupdateの関数を経由する時には自動でデータを展開してくれるんですが、普通のデータは多少加工が入りますが、Zend_Db_Exprが設定されていた場合にはコンストラクタに設定した文字列をそのまま出力してくれるようです。

他にもこいつを使う事によってDBの関数を使う事も可能になります。



今までどうすんだろうと無視してましたが、やっと解決。

0 件のコメント :

コメントを投稿