5

構築中のCatalystアプリでDBIx::Classを使用しています。うまく機能しますが、自分のニーズに合わせて開発した独自の db 関数を使用する必要がある場合があります。このため、dbh が必要です。しかし、私はすでに使用しているので、使用している dbh が既にあることを知っています。データベースへの別の不要な接続を回避するために、既に作成されているdbh を使用したいと思います。DBIx::Class::Storage::DBIモジュールにとの 2 つのメソッドがあることは知っていますが、この 2 つの違いが何であるか、dbh にアクセスするための最良の方法であるかどうかはよくわかりません。dbh を取得する最良の方法を教えてください。DBIx::ClassDBIx::Classdbhdbh_doDBIx::ClassCatalystアプリ?以下のように、dbhをスタッシュに保存する転送可能な方法をお勧めします。

sub dbh :Private { 
    my ($self, $c) = @_;
    $c->stash->{dbh} = #get dbh from DBIx::Class here
}

ありがとう!

4

2 に答える 2

14

私はいつもこれを調べなければなりません。スキーマ オブジェクトのインスタンスがあると仮定すると、メソッドを介してその Storage オブジェクトを取得できますstorageStorage::DBIそれが であると仮定するとdbh、データベースハンドルを取得するメソッドが利用可能です。そう:

my $dbh = $c->model( 'My::DB' )->storage->dbh;

トリックを行う必要があります。

于 2013-02-06T01:23:40.927 に答える
-2

@srchulo回答は素晴らしく、dbh_doは組み込みの例外処理に適していますが、dbhを使用せずにDBIX :: Classで動作するように関数を変換することをお勧めします。そうすれば、次回は 1 か所を変更するだけで済み、従来の dbh や生の sql を探し続ける必要はありません。それが理にかなっていることを願っています。

于 2013-02-06T05:13:43.733 に答える