在我的数据库中,我有 5 个独立的模式,以便我可以将对象组织成逻辑组。我使用
dbicdump
创建 DBIx::Class 模式,但注意到它只从公共模式加载表。我想出了如何使用 dbicdump 加载所有模式,但现在我不知道从这里开始哪里设置和使用它。我在网上查找了所有资源,但发现的文档很少。 我唯一发现的事情,我真的对这个解决方案不太满意。我想知道是否有人遇到过这种情况,以及他们是如何处理的。
我相信你需要一个最近的 DBIx::Class,但我使用这样的东西:
#!/usr/bin/perl
use v5.14;
use DBIx::Class::Schema::Loader qw/ make_schema_at /;
use Path::Tiny;
my $dest_dir = '.';
my $pkg_base = 'Foo';
(my $pkg_dir = $pkg_base) =~ s/::/\//g;
# Delete any previous run
path($dest_dir.'/'.$pkg_base)->remove_tree;
make_schema_at(
$pkg_base.'::Schema',
{
debug => 0,
dump_directory => $dest_dir,
db_schema => '%',
moniker_parts => ['schema', 'name'],
#rescan => 1,
},
[ 'dbi:Pg:dbname=mydb port=5432', 'dbuser', 'dbpass' ],
);
exit;
这给了我类似的东西:
Foo::Schema::Result::PublicTable1
Foo::Schema::Result::Schema2Table2
etc
文档中有各种选项的详细信息。我似乎记得当我将它们放在一起时,我交叉引用了文档与 dbicdump 的源代码。
HTH
我找到了这个,它几乎就是我所需要的。但我想要传统的 :: 和真正的类(基于表)与包含随机 SQL 位的视图类的分离,所以,我有:
#!/usr/bin/perl
use DBIx::Class::Schema::Loader qw/ make_schema_at /;
use Path::Tiny;
my $dest_dir = '../sql' ;
my $pkg_base = 'Cclite2';
# Delete any previous run
path($dest_dir.'/'.$pkg_base)->remove_tree;
make_schema_at(
$pkg_base.'::Schema',
{
debug => 0,
dump_directory => $dest_dir,
db_schema => 'cclite2',
moniker_parts => ['schema', 'name'],
moniker_part_separator => '::',
naming => {
relationships => 'v8',
monikers => 'v8',
column_accessors => 'v8',
force_ascii => 1,
},
},
[ 'dbi:Pg:dbname=dbname', 'dbuser', 'dbpass' ],
);
exit;
这给出了这个:
├── Schema
│ │ └── Result
│ │ ├── Cclite2
│ │ │ ├── OmAuth.pm
│ │ │ ├── OmCategory.pm
etc.
│ │ │ └── OmYellowpage.pm
│ │ ├── OmAdminBalanceView.pm
│ │ ├── OmAdsRss.pm
etc.
│ │ ├── OmTradesByUserView.pm
│ │ └── OmVolumeView.pm
│ └── Schema.pm
这不是对第一个答案的批评。这只是一个适合我的选择,也可能适合其他人。
您必须向 make_schema_at 提供如下选项,才能正确设置数据库模式:
# list the schemas you want to include (also works with 'public' etc.)
db_schema => ['schema1', 'schema2',...],
# make queries work, by using schema.table instead of only table name
qualify_objects => 1,
# set up proper namespacing for result classes
moniker_parts => ['schema', 'name'],
moniker_part_separator => '::',
来源: