2

我在Catalyst应用程序中使用DBIx::Class,我想知道是否有可能使HTML::FormHandler使用代码前面已经使用的相同 dbh (也许它已经这样做了?)。例如:DBIx::Class

#connect to db and make query
my $val = $c->model('DB::Example')->search({ condition => 'y'});

my $form = myapp::Form::Example->new;

#now reuse dbh here when updating somehow??
return unless $form->process(
    schema  => $c->model('DB')->schema,
    item_id => $c->user->id,
    params => $c->req->params,
); 

我知道即使创建两个数据库句柄也不会影响性能,但我想尽可能简洁:)

另外,如果我要一个接一个地调用 DB DBIx::Class,那会重用相同的 dbh 吗?谢谢!

4

2 回答 2

3

每个 DBIx::Class::Schema 实例都有自己的 dbh。如果你 fork,它也会注意为每个进程创建一个新的数据库连接。

因此,如果您将 Catalyst 模型实例传递给 Formhandler,它将重用 dbh。

于 2013-02-05T07:04:57.827 回答
0

传递 dbh 可能不是你想要的,MVC 的整个想法是提供抽象,所有建议的解决方案都违反了它。您可以将 dbh(使用 dbh 可能不是最好的主意,但仍然是)保留在控制器中,并使用 $c->stash('what/whatever.html') 获取数据并将其存储在 html 中。因此,前端确实必须处理任何数据获取。

于 2013-02-06T05:25:05.553 回答