* 任意のSQLを実行する [#t524e76e]
任意の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
** 基になるテーブルクラスがある場合 [#fd249fe4]
そのパッケージを継承する。例えばUserパッケージが基になるテーブルクラスの場合、以下のようになる。
package MyApp::Schema::Result::UserExt;
use base 'MyApp::Schema::Result::User';
__PACKAGE__->result_source_instance->name(\"(略)");
1;
すると、UserExtの結果セットクラスでUserパッケージのメソッドをそのまま使える。