【问题标题】:DBIx::Class reuse dbh with HTML::FormHandlerDBIx::Class 使用 HTML::FormHandler 重用 dbh
【发布时间】:2013-01-20 00:18:24
【问题描述】:

我在Catalyst 应用程序中使用DBIx::Class,我想知道是否可以使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?谢谢!

【问题讨论】:

    标签: perl catalyst dbix-class


    【解决方案1】:

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

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

    【讨论】:

    • 你知道将催化剂模型实例传递给formhandler的语法吗?
    • 你已经在你的代码中使用 schema => $c->model('DB')->schema 完成了。
    • 哦,好吧。我明白。感谢您的信息!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2016-08-25
      • 2011-01-07
      • 2012-07-06
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多