編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

任意の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パッケージのメソッドをそのまま使える。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2010-06-09 (水) 08:55:44 (2781d)