任意のSQLを実行する任意のSQLを書いたテーブルクラスを以下のように作成する。 package MyApp::Schema::Result::UserExt; use base 'DBIx::Class'; __PACKAGE__->load_components(qw/Core/); __PACKAGE__->table("NONE"); __PACKAGE__->add_columns(qw/user_id/); __PACKAGE__->result_source_instance->name(\"( SELECT user_id FROM user WHERE status = ? )"); 1; 上記のテーブルクラスを以下のようにして使う。 my @users = $schema->resultset( 'UserExt' )->search( {}, { bind => [ 1 ] } )->all; この際、実行されるSQLは以下のようになる。 SELECT me.user_id FROM ( SELECT user_id FROM user WHERE status = ? ) me 基になるテーブルクラスがある場合そのパッケージを継承する。例えばUserパッケージが基になるテーブルクラスの場合、以下のようになる。 package MyApp::Schema::Result::UserExt; use base 'MyApp::Schema::Result::User'; __PACKAGE__->load_components(qw/Core/); __PACKAGE__->table("NONE"); __PACKAGE__->result_source_instance->name(\"(略)"); 1; すると、UserExtの結果セットクラスでUserパッケージのメソッドをそのまま使える。 |
|