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 # って言う事を、そのうちやる気でいよう・・
と、中の人が言ってるので、いつか何とかなるかもしれません。