備忘録。
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」などと表示される