2013-02-05 51 views
2

我使用DBIx::ClassCatalyst應用程序,我想知道是否有可能使HTML::FormHandler使用已經在代碼中使用DBIx::Class前面相同的胸徑(也許它已經這樣做了?)。例如:DBIx ::類重用胸徑與HTML :: FormHandler

#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一個接一個地進行DB調用,是否重複使用相同的dbh?謝謝!

回答

3

每個DBIx :: Class :: Schema實例都有自己的dbh。如果你分叉,它也會在每個進程中創建一個新的數據庫連接。

因此,如果您將Catalyst模型實例傳遞給Formhandler,它將重用dbh。

+0

您是否知道將催化劑模型實例傳遞給formhandler的語法? – srchulo

+2

您已經在schema => $ c-> model('DB') - > schema的代碼中執行此操作。 –

+0

哦,好吧。我明白。謝謝(你的)信息! – srchulo

0

傳遞dbh可能不是你想要的,MVC的整個想法是提供抽象的,並且所有的解決方案都被認爲違反了它。您可以在控制器中保留dbh(使用dbh可能不是最好的主意),並使用$ c-> stash('what/whatever.html')獲取數據並將其存儲在html中。這樣,前端不得不處理任何數據提取。