我有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的东西。如果$table
为TableA
,则ds需要变为sub ds { DataSource->TableA->new(); }
,如果$table
为TableB
,则ds需要变为sub ds { DataSource->TableB->new(); }
,依此类推。我怎么能写这个而不依赖于很多条件,我想知道吗?
不幸的是我无法修改ds。我很想依靠滕这个......
答案 0 :(得分:2)
您可以使用变量调用方法。如果您的表名在$ table中,那么您可以使用。
DataSource->$table->new();