備忘録。
UPDATE users SET password = MD5('mypass') WHERE id = 15;
idが15であるユーザーのパスワードに’mypass’をMD5で符号化して保存する。
みたいなSQL文をDBIx::Class(というか、SQL::Abstract)で表現するにはどうするか。この場合はこう書く。
$schema->resultset( "Users" )
->update( {
password => \"MD5('mypass')",
id => 15,
} );
なんてことはない。文字列のリファレンスを値として与えるだけだ。更に応用として次のようなSQLだと、
SELECT CONCAT( 'ID', LPAD( id, 6, '0' ) ) AS member_id FROM users;
usersテーブルから
idを取り出し、頭に'ID'を付けて6桁0埋めで取り出す。(id = 15なら'ID000015'となる)
こうなる。
my $it = $schema->resultset( "Users" )
->search( undef, {
"+select" => [ \"CONCAT( 'ID', LPAD( id, 6, '0' ) )" ],
"+as" => [ "member_id" ],
} );
say $it->first->get_column( "member_id" );
# 「ID000015」などと表示される
