色々なデータの更新方法2 #09
こんにちわ!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!:)