Aug 23

逆引きrhaco48: updateするカラムを指定する

複数データの「あるカラム」だけ変更したい場合はCriterion::whichを使用します。

$db = new DbUtil(Product::connection());
$product = new Product();
$product->setStatus(1);
$db->update($product, new C(Q::which(Product::columnStatus())));


これでProductテーブルのステータスフィールドを全て1に修正することになります。whichを指定しないと他のフィールドまで更新されてしまいます。
 もちろん他のCriterionを使用して修正範囲を絞りこむことも可能です。

2009/3/25追記
今のところupdateする時は先にベリファイがかかるため、whichで指定したカラムに関係なく、ベリファイに引っかかると更新されません。
例えば上の例で、もしProductオブジェクトがnameカラムを持ち、それが必須(project.xmlでrequire="true")な場合は上記コードでは更新されません。

$db = new DbUtil(Product::connection());
$product = new Product();
$product->setStatus(1);
$product->setName("dummyData");
$db->update($product, new C(Q::which(Product::columnStatus())));


という形でダミーデータを入れると動きます。

# verifyにwhichList渡してごにょごにょ
# 11:33am 26x26tokushima
# って言う事を、そのうちやる気でいよう・・ 


と、中の人が言ってるので、いつか何とかなるかもしれません。

| comment(0)