在我的数据库中,我有5个单独的模式,以便我可以将对象组织成逻辑组。我使用dbicdump
来创建我的DBIx :: Class模式,但注意到它只加载了公共模式中的表。我想出了如何使用dbicdump加载我的所有模式,但是现在我不知道从哪里开始设置并使用它。我在网上寻找任何资源,发现很少的文档。 The only thing I did find,我对解决方案真的不太满意。我想知道是否有人以前遇到过这个,以及他们是如何处理的。
答案 0 :(得分:4)
我相信你需要一个最近的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
docs中有各种选项的详细信息。我似乎记得当我把它放在一起时,我用dbicdump的源代码交叉引用了文档。
HTH
答案 1 :(得分:0)
我找到了这个,这几乎是我需要的。但是我想要传统的 :: 和真正的类(基于表)与包含随机 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
这不是对第一个答案的批评。这只是一种适合我也可能适合其他人的替代方案。