我有几个(约100个计数)MySQL表,每个表的条目超过50M。问题是所有这些表都有完全相同的结构,我想在DBIx :: class中为它们创建一个结果类。 例如,考虑一系列具有以下结构的表:
CREATE TABLE users_table_1 (
name TINYTEXT,
username TINYTEXT
);
CREATE TABLE users_table_2 (
name TINYTEXT,
username TINYTEXT
);
...
我希望能够在不必为每个表创建结果类的情况下执行以下操作。
my $users_1_rs = $schema->resultset('User_table_1');
my $users_2_rs = $schema->resultset('User_table_2');
...
我是DBIx :: Class的新手,我能提出的唯一两个可能的解决方案是:
有人能指出我对这个问题更优雅的解决方案吗?
答案 0 :(得分:2)
在DBIx::Class
中可能有一个元编程 API,用于动态创建表类。
代替深入研究(相当大的DBIx::Class
)文档,这是在普通Perl 元编程中创建类的另一个例子:
package MySchema;
use strict;
use warnings;
use parent 'DBIx::Class::Schema';
our @tables = map { 'users_table_' . $_ } 1..2;
require DBIx::Class::Core;
# build table classes for users_tables_*
for my $table (@MySchema::tables) {
my $t = "MySchema::$table";
{
no strict 'refs';
@{$t . '::ISA'} = qw/DBIx::Class::Core/;
}
$t->table($table);
$t->add_columns(qw/name username/);
}
__PACKAGE__->load_classes(@MySchema::tables);
1;
在我的简单测试中,以上对我有用:)
答案 1 :(得分:0)
我会在搜索功能中使用“from”参数来提取:
...resultset('TableA')->search({}, { from=>'TableB'});