【发布时间】:2009-10-06 08:02:18
【问题描述】:
我正在使用带有 DBIx::Class 的 mod_perl 上的 CGI::Application 并且我希望在实例化时使用 new 定义一个新的 dbic 模式。到目前为止,我还无法让它工作。我最接近的是一个超类,它有一个 connect() 方法,该方法返回一个新对象,但我宁愿它已经被连接和实例化。
我真的很感激任何想法。
谢谢!
注意:好的,显然还没有帮助,但是,与此同时,我创建了一个访问器,它可以延迟实例化 DBIx::Class,这样可能会更好一些。检查它:
sub schema {
my $self = shift;
unless ($self->{schema}) {
$self->{schema} = ACD::Model->connect(@{$self->cfg->{$ENV{MODE}}->{connect_params}});
}
return $self->{schema};
}
然后当然要使用它,您会执行以下操作:
$self->schema->resultset('Foo')->find(1234);
【问题讨论】:
-
我没有给你一个连贯的答案......但我认为这是你想要消除的黑客行为。 "$self" 不应该负责管理数据库连接;您应该在“其他地方”实例化数据库连接,然后将其传递给需要它的对象。 (像 Bread::Board 这样的模块让这变得非常简单。)
标签: perl mod-perl dbix-class cgiapp