Home > MySQL > | perl > DBIx::Classのクエリで関数を使う

DBIx::Classのクエリで関数を使う

備忘録。

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

Comments:0

Comment Form

Trackbacks:0

TrackBack URL for this entry
http://blog.remora.cx/mt/mt-tb.fcgi/35
Listed below are links to weblogs that reference
DBIx::Classのクエリで関数を使う from blog.remora.cx

Home > MySQL > | perl > DBIx::Classのクエリで関数を使う

Feeds
CC Licence

Creative Commons License

このブログはクリエイティブ・コモンズでライセンスされています。

W3C Validation

I ♥ validator

Return to page top