- DBIx::Custom
- here
updateメソッドで行を更新
テーブルの行を更新するにはupdateメソッドを使用します。
$dbi->update( {title => 'Perl', author => 'Ken'}, table => 'book', where => {id => 1}, );
第一引数には更新のためのデータをハッシュリファレンスで指定します。対象のテーブルをtableで指定します。更新する行の条件をwhereで指定します。whereにはハッシュリファレンスか、DBIx::Custom::Whereオブジェクトを指定することができます。次のようなSQLが発行されます。
update book set title = ?, author = ? where id = ?;
対応する値がプレースホルダに埋め込まれます。
またスカラリファレンスを値として渡すと、SQLの中にそのまま埋め込むことができます。
{date => \"NOW()"}
updateメソッドのオプション
updateメソッドは「execute」メソッドのすべてのオプション]を使用することができ、新しく以下のオプションが利用できます。executeのオプションについては「executeメソッド」のオプションの項目を参考にしてください。
IDによる条件指定 id
IDによる条件指定を行うにはidオプションを使用します。primary_keyオプションが指定されている必要があります。
id => 4 id => [4, 5]
たとえば以下のupdate文を実行するとします。
$dbi->update( {title => 'Perl', author => 'Ken'} primary_key => ['id1', 'id2'], id => [4, 5], table => 'book' );
これは以下のupdate文と同じ意味になります。
$dbi->update( {title => 'Perl', author => 'Ken'} where => {id1 => 4, id2 => 5}, table => 'book' );
プレフィックス prefix
updateとテーブル名の間に文字列を追加することができます。
prefix => 'or replace'
たとえば以下のようなSQL文を実行することができます。
update or replace book
テーブル名 table
tableオプションでテーブル名を指定します。
table => 'book'
更新時に現在時刻を設定 mtime
更新時に更新時刻を更新するには、mtimeオプションで更新時を格納する列名を指定します。
mtime => 'modified_time'
デフォルトのフォーマットは「YYYY-mm-dd HH:MM:SS」です。これはnow属性によって変更することができます。
Where句 where
Where句を記述するにはwhereオプションを使用します。
where => {author => 'Ken', 'title' => 'Perl'} where => [ ['and', ':author{=}', ':title{like}'], {author => 'Ken', title => '%Perl%'} ]
whereオプションの指定方法については「selectメソッド」のwhereオプションを見てください。Where句の生成の詳細については動的なWhere句の生成を見てください。
プレースホルダーのラッピング wrap
update文のsetの部分のプレースホルダーの部分を編集したい場合はwrapオプションを使用します。
wrap => {price => sub { "max($_[0])" }}
たとえば次のようなupdateを実行したとします。
$dbi->update( {price => 100}, table => 'book', where => {id => 1} wrap => {price => sub { "$_[0] + 5" }} );
以下のようなSQLが実行されます。
update book set price = ? + 5 where id = 1
すべての行の更新 update_all
テーブルのすべての行を更新するにはupdate_allメソッドを使用します。安全のためにupdateメソッドでは、行のすべての更新を許可してないので、代わりにupdate_allメソッドを使用します。
$dbi->update_all({title => 'Perl', author => 'Ken'}, table => 'book');
第一引数に更新のためのデータをハッシュリファレンスで指定します。対象のテーブルをtableで指定します。次のようなSQLが発行されます。
update book set title = ?, author = ?;
対応する値がプレースホルダに埋め込まれます。