DBIx :: Class使用HTML :: FormHandler重用dbh

时间:2013-02-05 06:16:38

标签: perl catalyst dbix-class

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

#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,
); 

我知道,即使它创建了两个数据库句柄,它也不会扼杀性能,但我希望尽可能简洁:)

另外,如果我一个接一个地使用DBIx::Class进行数据库调用,那么重用相同的dbh吗?谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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