社員ブログ
HOME  社員ブログ
ホーム > PHP, 社員:ピーター > FuelPHPのModel_CRUDクラスで必要なカラムのみ更新

FuelPHPのModel_CRUDクラスで必要なカラムのみ更新

2013年07月18日 18時13分07秒

こんにちは、ピーターです。
FuelPHP 1.6の話です。

こんなテーブルとモデルがあったとします。

SQL

CREATE TABLE `tb_user` (
  `user_id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50),
  `email` varchar(50),
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

PHP

class Model_User extends Model_Crud
{
    protected static $_table_name = 'tb_user';
    protected static $_primary_key = 'user_id';
}

Model_Crudクラスでfind()してsave()すると、すべてのカラムにセットするUPDATE文が発行されます。

PHP

$user_id = 1;
$user = Model_User::find_by_pk($user_id);
$user->email = 'hoge@example.com';
$user->save();

SQL

UPDATE `tb_user`
SET `user_id` = '1', `name` = 'hoge', `email` = 'hoge@example.com'
WHERE `user_id` = '1'

すべてのカラムにセットされるのは気持ち悪いので、必要なカラムのみセットする方法はないか探してみました。

PHP

$user = Model_User::forge();
$user->user_id = 1;
$user->email = 'hoge@example.com';
$user->is_new(false);
$user->save();

SQL

UPDATE `tb_user`
SET `user_id` = 1, `email` = 'hoge@example.com'
WHERE `user_id` = 1

`name` = 'hoge' はなくなりましたが、まだ `user_id` = 1 が余計ですね。
モデルに $_properties プロパティを追加してみました。

PHP

class Model_User extends Model_Crud
{
    protected static $_table_name = 'tb_user';
    protected static $_primary_key = 'user_id';
    protected static $_properties = [
        'name',
        'email',
    ];
}

そして再度実行。

PHP

$user = Model_User::forge();
$user->user_id = 1;
$user->email = 'hoge@example.com';
$user->is_new(false);
$user->save();

SQL

UPDATE `tb_user`
SET `email` = 'hoge@example.com'
WHERE `user_id` = 1

うまくいきました。

PHP, 社員:ピーター

  1. コメントはまだありません
  1. トラックバックはまだありません