20 個のテーブルがあり、ユーザーが「ビュー」部分で選択したテーブルの行に値を返す検索機能を「モデル」に追加しようとしています。
sub search {
my ( $table, $page_no, $search_value, $where, $order ) =
@args{qw/table page_no search_value where order/};
my $option = {};
if ( defined $order || defined $self->order ) {
$option->{order_by} = $order // $self->order;
}
my @rows = $self->ds->select( $where, $option );
return ( \@rows );
}
残念ながら、私の "ds" メソッド (クエリを実行するために SQL::Abstract に依存している) は一般的すぎます。
sub ds { DataSource->new(); }
親として DataSource.pm (私の一般的な DBI モジュール) を使用し、ds を指定する特定のモジュールがあります。たとえば、テーブル A を変更する場合は、次のように呼び出す必要があります。
sub ds { DataSource->TableA->new(); }
私の問題は、この場合、ユーザーが変更したいテーブルがアプリオリにわからないため、どのような値$table
が取られるかわからないことです。$table
入力として受け取り、それぞれの ds を与えるものを書きたいと思います。が の場合、ds は になる必要があり、 が$table
の場合、dsはになる必要があります。多くの条件に依存せずにこれを書くにはどうすればよいでしょうか?TableA
sub ds { DataSource->TableA->new(); }
$table
TableB
sub ds { DataSource->TableB->new(); }
残念ながら、ds を変更することはできません。これはTengに頼りたいです...