- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- Perl-DBIC/INSERT-DELETE-UPDATE へ行く。
- 1 (2007-09-05 (水) 10:53:00)
- 2 (2007-09-05 (水) 10:53:13)
- 3 (2008-05-26 (月) 03:42:45)
- 4 (2008-11-04 (火) 01:20:17)
- 5 (2009-07-12 (日) 08:31:07)
- 6 (2009-12-04 (金) 05:06:13)
- 7 (2009-12-16 (水) 05:27:36)
- 8 (2010-05-17 (月) 05:58:16)
- 9 (2011-01-27 (木) 12:45:00)
- 10 (2011-04-18 (月) 18:05:12)
- 11 (2011-06-03 (金) 16:02:27)
INSERT / DELETE / UPDATE
INSERT
$rs->create({ name => "taro", email => "taro@example.com" });
DBの関数を使う
$rs->create( { create_time => \'NOW()'} ); # 関数名をスカラリファレンスにする
シリアル型のキーを取得(last_insert_id())
$user = $rs->create( { name => "taro" } ); $id = $user->id;
UPDATE
$rs->email('taro@example.com'); $rs->update;
または
$rs->update( { email => 'taro@example.com' } );
まとめてUPDATE
$rs->search( { name => 'taro' } )->update_all( { email => 'taro@example.com' } );
http://search.cpan.org/perldoc?DBIx::Class::ResultSet#create
DELETE
まとめてDELETE
$rs->search( { name =>'taro' } )->delete_all;
INSERT兼UPDATE
find_or_new()
キーで検索し、見つかれば既存レコードを返し、なければ新規レコードを返す。
my $user = $rs->find_or_new(id => 10); # プライマリキーで検索し、 if ($user->in_storage) { # $userが既存レコードか新規レコードかをin_storage()で調べる $user->update({name => 'taro'}); # 既存レコードならupdate()する } else { $user->name('taro'); # 新規レコードならinsert()する $user->insert; }
- プライマリキー以外で検索する場合、( { name => 'taro' },{ key => 'user_name_key' })のようにkeyにユニーク制約名を指定する。オプション等はDBIx::Class::ResultSet::find()と同様。
- idがシリアル型(AUTO_INCREMENT)の場合、id => undef とすると、シリアル型に沿ったidのrowオブジェクトが作られる。
- http://search.cpan.org/perldoc?DBIx::Class::ResultSet#find_or_new
find_or_create()
キーで検索し、見つかれば既存レコードを返し、なければ新規にINSERTしてレコードを返す。
my $user = $rs->find_or_create(id => 10, name => 'taro'); # プライマリキーで検索し、レコードが見つからなければINSERTし、 # レコードが見つかればそれを返す(但し、name列は更新されていない) if ($user->in_storage) { # よってこのin_storage()は常に真 }
update_or_new()
キーで検索し、見つかればUPDATEしてレコードを返し、なければ新規レコードを返す。
$user = $rs->update_or_new(id => 10, name => 'taro'); # プライマリキーで検索し、レコードが見つかれば、この時点でUPDATEする # UPDATE user SET name = 'taro' WHERE id = 10 if ($user->in_storage) { # レコードが見つからなければ、明示的にinsert()する $user->insert; # INSERT INTO user (id, name) VALUES (10, 'taro') }
update_or_create()
キーで検索し、見つかればUPDATEしてレコードを返し、なければ新規にINSERTしてレコードを返す。
my $user = $rs->update_or_create(id => 10, name => 'taro'); # プライマリキーで検索し、 # この時点で、レコードが見つかればUPDATE、なければINSERTする if ($user->in_storage) { # よってこのin_storage()は常に真 }
↑実際に一番よく使うのはコレ?