1

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はになる必要があります。多くの条件に依存せずにこれを書くにはどうすればよいでしょうか?TableAsub ds { DataSource->TableA->new(); }$tableTableBsub ds { DataSource->TableB->new(); }

残念ながら、ds を変更することはできません。これはTengに頼りたいです...

4

1 に答える 1

2

変数を使用してメソッドを呼び出すことができます。テーブル名が $table にある場合は、使用できます。

DataSource->$table->new();
于 2013-08-01T09:41:48.823 に答える