色々なデータの更新方法2 #09B!

こんにちわ!wiiマリオが楽しすぎて仕方ないnekokakです!

九日目はDBIx::Skinnyでのデータ更新メソッドの説明の続きです。

DBIx::Skinnyではselect文以外にupdate文やdelete文についても生で書く事が出来ます。

updte_by_sql

update_by_sqlを使えばupdateクエリの生SQLを書く事が出来ます。

my $update_count = $db->update_by_sql(q{UPDATE user SET name = ?}, ['nekokak']));

update_by_sqlメソッドの返却値としては何件のレコードが更新されたかの件数がかえってきます。

複雑なクエリでupdateをかけたい場合にご利用ください。

delete_by_sql

delete_by_sqlを使えばdeleteクエリの生SQLを書く事ができます。

my $delete_count = $db->delete_by_sql(q{DELETE FROM user WHERE id < ?},[10]);

delete_by_sqlメソッドの返却値としては何件のレコードが削除されたのかの件数がかえってきます。

複雑なクエリでdeleteをかけたい場合にご利用下さい。

find_or_new

更新用のメソッドというわけではありませんが、DBIx::Skinnyにはfind_or_newメソッドがあります。

my $row = $db->find_or_new('user',{name => 'nekokak'});

find_or_newメソッドの

第一引数に対象となるテーブル

第二引数に検索条件を指定します。

内部では第二引数に指定された検索条件を元に1レコードdbからfetchします。

dbからデータが取得出来た場合は取得したデータのrowオブジェクトをかえします。

dbからデータが取得できない場合は検索条件をもとにしたrowオブジェクトを生成します。

find_or_createメソッドではdbからデータが取得できない場合は無条件でdbにレコードを作成しにいきますが、

find_or_newメソッドではdbにレコードを作成しません。

find_or_newメソッドをつかってレコードを作成したい場合は、

my $row = $db->find_or_new('user',{name => 'nekokak'});
$row->insert;

の用にrowオブジェクトからinsertメソッドを呼び出すとこの時点でDBにレコードを作成します。

本日はここまで。

明日はDBIx::Skinnyでのトランザクションの使い方を説明したいと思います。

have a nice skinny days!:)