* INSERT / DELETE / UPDATE [#e95b7f63]
* INSERT / DELETE / UPDATE 基本[#e95b7f63]

** INSERT [#v04fa531]
 my $user = $rs->create({
    name  => "taro",
    email => "taro@example.com"
 });
*** DBの関数を使う [#k6b50985]
 my $user = $rs->create( { create_time => \'NOW()'} ); # 関数名をスカラリファレンスにする

*** シリアル型のキーを取得(last_insert_id()) [#h69eb3c1]
 $user = $rs->create( { name  => "taro" } );
 $id =  $user->id;

** UPDATE [#q20c4427]
*** 1件更新 [#fbf6571d]
 $rs->email('taro@example.com');
 $rs->update;
または
 $rs->update( { email => 'taro@example.com' } );
*** まとめて更新 [#r7dd22b3]
 $rs->search( { name => 'taro' } )->update_all( { email => 'taro@example.com' } );

http://search.cpan.org/perldoc?DBIx::Class::ResultSet#create

** DELETE [#h93214b1]
*** 1件削除 [#fb31d50c]
 $rs->find(3)->delete();
*** まとめて削除 [#o71a7c5d]
 $rs->search( { name =>'taro' } )->delete_all;

** INSERT兼UPDATE [#k23cd99b]
*** find_or_new() [#rbf3ca5c]
キーで検索し、見つかれば既存レコードを返し、なければ新規レコードを返す。
 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()>http://search.cpan.org/perldoc?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() [#qcfe88be]
キーで検索し、見つかれば既存レコードを返し、なければ新規にINSERTしてレコードを返す。
 my $user = $rs->find_or_create(id => 10, name => 'taro'); # プライマリキーで検索し、レコードが見つからなければINSERTし、
                                                           # レコードが見つかればそれを返す(但し、name列は更新されていない)
 if ($user->in_storage) {                                  # よってこのin_storage()は常に真
 }

*** update_or_new() [#i2d68b0c]
キーで検索し、見つかれば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')
 }
- http://search.cpan.org/perldoc?DBIx::Class::ResultSet#update_or_new

*** update_or_create() [#mbbafd1d]
キーで検索し、見つかればUPDATEしてレコードを返し、なければ新規にINSERTしてレコードを返す。
 my $user = $rs->update_or_create(id => 10, name => 'taro'); # プライマリキーで検索し、
                                                             # この時点で、レコードが見つかればUPDATE、なければINSERTする
 if ($user->in_storage) {                                    # よってこのin_storage()は常に真
 }
↑実際に一番よく使うのはコレ?

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS