INSERT / DELETE / UPDATE 基本

INSERT

my $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;

UPDATE

1件更新

$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

DELETE

1件削除

$rs->find(3)->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;
}

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()は常に真
}

↑実際に一番よく使うのはコレ?


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

Last-modified: 2011-06-16 (木) 11:24:54 (2589d)