- 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 = ?;
対応する値がプレースホルダに埋め込まれます。
 DBIx::Custom
DBIx::Custom