INSERT / DELETE / UPDATE 基本INSERTmy $user = $rs->create({ name => "taro", email => "taro@example.com" }); DBの関数を使うmy $user = $rs->create( { create_time => \'NOW()'} ); # 関数名をスカラリファレンスにする シリアル型のキーを取得(last_insert_id())$user = $rs->create( { name => "taro" } ); $id = $user->id; UPDATE1件更新$rs->email('taro@example.com'); $rs->update; または $rs->update( { email => 'taro@example.com' } ); まとめて更新$rs->search( { name => 'taro' } )->update_all( { email => 'taro@example.com' } ); http://search.cpan.org/perldoc?DBIx::Class::ResultSet#create DELETE1件削除$rs->find(3)->delete(); まとめて削除$rs->search( { name =>'taro' } )->delete_all; INSERT兼UPDATEfind_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; }
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()は常に真 } ↑実際に一番よく使うのはコレ? |
|