2011年9月7日

Yii Framework: 単一フィールドの更新

現在自分の知っている範囲では3通りがあります。

<?php
class HogeController extends Controller
{
/**
* 単純な単一フィールド更新の例
*/
public function actionIsChecked($id)
{
Hoge::model()->updateByPk($id, array('checked' => 1);
...
}
/**
* 値を比較しての単一フィールド更新の例
*/
public function actionChangeFlag($id)
{
$model = Hoge::model()->findByPk($id);
if (!$model) {
throw new CHttpException(404, 'データがありません');
}
$model->is_deleted = $model->is_deleted !== '0' ? 0 : 1;
$model->update(array('is_deleted'));
// or $model->save(false, array('is_deleted'));
...
}
一番単純なのが updateByPk()。値を比較してから更新したりするときは $model->update() や $model->save(false, array('...'));

この3つはすべてバリデーションは通さず更新されます。バリデーションを通したい場合は $model->save(true, array('...')) などにすると良いと思います。

また、今回はすべてコントローラに書いていますが、基本モデルに書くほうがいいと思います。だた、サンプルの actionChangeFlag() のように、上手く書けば再利用可能なアクションになりうるものなどは、コントローラに書いたほうが良い場合もあります。

参考リンク

0 件のコメント:

コメントを投稿