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

2つのデータベースハンドルを作成している場合でも、パフォーマンスが低下することはないことはわかっていますが、可能な限り簡潔にしたいと思います:)

また、次々とDB呼び出しを行う場合DBIx::Class、同じdbhを再利用しますか?ありがとう!

4

2 に答える 2

3

各DBIx::Class::Schemaインスタンスには独自のdbhがあります。フォークした場合は、プロセスごとに新しいデータベース接続を作成することにも注意が必要です。

したがって、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 に答える