例えば、下記のようなテーブルがあるとする。
CREATE TABLE `sample` (
`sample_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`delete_flag` bigint(20) unsigned NOT NULL DEFAULT '0',
`sample1` int(10) unsigned DEFAULT NULL,
`sample2` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`sample_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
delete_flag に sample_id を代入して上書きしたい。
発行したいSQLは以下の通り
UPDATE sample SET delete_flag = sample_id, sample1 = 1 WHERE sample2 = 2;
以下のようにして書くと、上記と同じようなSQLが発行できた。
// 上書き用変数作成
$update_set['sample1'] = 1;
$update_set['delete_flag'] = DB::expr('sample_id');
// SQL 実行
DB::update('sample')->set($update_set)->where('sample2', '=
', 2)->execute();
DB::expr 関数をしようせずに実行すると誤ったSQLが発行される。
// 上書き用変数作成
$update_set['sample1'] = 1;
// ↓この状態だと、delete_flag に sample_id という文字列を入れてしまう。
$update_set['delete_flag'] = 'sample_id';
// SQL 実行
DB::update('sample')->set($update_set)->where('sample2', '=
', 2)->execute();
【参考】FuelPHP公式