問題タブ [dbix-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - PerlでMySQL列挙値をきれいに抽出するにはどうすればよいですか?
データベースに挿入する前に、いくつかのデータがmysql列挙型にあることを確認する必要があるコードがあります。これを行うために私が見つけた最もクリーンな方法は、次のコードです。
DBIx::Classを使用しています。確かにこれを達成するためのより良い方法がありますか?($ table変数は、外部ソースからではなく、コードから取得されていることに注意してください。したがって、セキュリティの問題はありません)。
perl - DBIX::Class 結果セットを外部データでフィルタリングするにはどうすればよいですか?
DBIx::Classを使用すると、SQL では生成できないデータでフィルタリングする必要がある結果セットがあります。私がする必要があるのは、この架空の例と実質的に同等のことです。
ドキュメントを読んでも、このような戦略を達成する方法がわかりません。
perl - DBD::ProxyをDBIx::Classで使用するにはどうすればよいですか?
ファイアウォールを介してデータベース接続を取得する必要があります。また、実行できるクエリを制限する必要があります。DBD::Proxyはこれに対する完璧なソリューションのようです。ただし、現在DBIx :: Classを使用しているため、それらをフックする方法がわかりません。
特に、DBD::ProxyはSQLを使用しません。特定の名前付きクエリが必要です。しかし、DBIx :: Classには、これらの名前付きクエリを呼び出す方法がないようです。
これはCatalystベースのWebアプリ内にあります。
perl - mod_perl を使用して CGI::Application で永続的な DBIx::Class を使用するにはどうすればよいですか?
DBIx::Class を使用して mod_perl で CGI::Application を使用しており、インスタンス化時に新しい dbic スキーマを定義する新しいようなものを使用したいと考えています。これまでのところ、私はそれを機能させることができませんでした。私がたどり着いた最も近いものは、新しいオブジェクトを返す connect() メソッドを持つスーパークラスですが、私はそれが既に接続され、インスタンス化されていることを望んでいます。
どんな考えでも本当に感謝します。
ありがとう!
注: わかりましたので、明らかにまだ助けにはなりませんが、当面の間、DBIx::Class を遅延インスタンス化するアクセサを作成したので、少しは改善されるかもしれません。それを確認してください:
そしてもちろん、それを使用するには、次のようにします。
perl - TemplateToolkitを使用するCatalystプロジェクトでDBIx::Class ResultSetを表示する正しい方法は何ですか?
DBIx :: Classの結果セットが与えられた場合、次に例を示します。
私が読んだチュートリアルでは、stashを使用して行のarrayrefを渡します。
これにより、この時点でクエリが実行され、結果のオブジェクトがスタッシュに詰め込まれるため、TemplateToolkitで次のように使用できます。
TTがDBからフェッチされるときに行を反復処理する適切な方法はありますか?
sql - DBIx::Class で DBIC_TRACE 出力をプリティプリントできますか?
DBIC_TRACE 環境変数を true に設定します。
特に実行中の SQL クエリを示す非常に役立つ出力を生成しますが、SQL クエリはすべて 1 行で表示されます。
おそらく複数の行に分割して、より適切にフォーマットするために、ある種の「sql tidy」ルーチンを介してプッシュする方法はありますか? それができない場合、そのようなフックを追加するためにハッキングする必要があるコードのどこに誰かが私に微調整を与えることができますか? また、不適切な形式の SQL クエリを受け入れて適切な形式の SQL クエリをプッシュするのに最適なツールは何でしょうか?
このコンテキストでの「適切な書式設定」は、単に「すべてを 1 行に」よりも優れていることを意味します。クエリの書式設定の特定のスタイルに特にこだわる必要はありません
ありがとう!
perl - 固定結合条件でDBIx::Class関係を作成するにはどうすればよいですか?
片側で複数のタイプのオブジェクトを処理できるリンクテーブルがあり、has_manyを使用してこれらのオブジェクトの1つからリンクテーブルに移動する方法を理解できません。
例:リンクテーブルには次のものが含まれます。
リソース側からの関係の構築は非常に簡単です。
しかし、ページ側から対応する関係を取得できませんでした。
not_pageリンクを取得します
'Invalid rel cond val page'エラーが発生します(これは私にとってそれほど驚くことではありませんでした)。
'Invalid rel condval"page"'エラーが発生します。バックスラッシュを投げても役に立ちませんでした。
DBIx :: Class :: Relationship :: Baseのコメント:
条件は、テーブル間の結合のSQL::Abstractスタイルの表現である必要があります
そして、私はそこから次のようなさまざまなオプションを試しました。
しかし、まったく成功しませんでした。
常に値'page'を含むページテーブルに別のフィールドを追加した場合、私は行うことができます
しかし、それはほとんど最適な解決策ではありません。
リンクテーブルをタイプごとに個別に分割することも可能ですが、これはDBIx :: Classへの適応を検討している既存のプロジェクトであり、テーブルを他の複数のテーブルに分割する方が多い場所もあります。それが価値があるよりも面倒。
perl - DBIx ::Classで「Parenthas_manyGrandChildrenthroughChildren」の関係を持つことはできますか?
次のような機能が必要です。
単純な連鎖結合を使用して、親クラスの外部で簡単に実行できます。
しかし、親クラス内では、スキーマオブジェクトにアクセスできません(アクセスすべきではありません)。親クラス内ではアクセスできます$self->children
が、子の結果セットが返され、それぞれを取得するために子を反復処理する必要がありますgrandchildren
。
このActiveRecordスタイルを定義する方法はありますか?
database - mod_perlでDBIC永続データベース接続を使用するにはどうすればよいですか?
Webアプリケーションにmod_perlを使用しています。現在、ネットワーク全体でmysqlデータベースを使用する予定です。display_customer_transaction.cgiへのすべてのCGIリクエストで、私のスクリプトは
- ネットワーク全体でデータベース接続を開きます
- SQLステートメントを使用してデータベースでクエリを実行します
- データベースから取得したデータを分析する
- データをHTML形式で印刷します
- データベース接続を閉じます
プロファイリングを行った後、ステップ(1)がボトルネックであることがわかりました。したがって、CGIリクエストごとにデータベース接続を開いたり閉じたりすることは避けたいと思います。私の願いは、最初のCGI要求がデータベース接続を開いた場合、(別のクライアントからの)2番目の着信CGI要求が最初のデータベース接続を再利用する可能性があることです。
「DBIX永続データベース接続」をGoogleで試しましたが、関連する結果がほとんど見つかりませんでした。(編集:これは、DBIC、またはDBIXではなくDBIx :: Classと呼ばれるためです。)
さらに、 Apache :: DBIを使用して関連情報を見つけます(ただし、私の意図はApache :: DBIではなくDBIXにあります)。私を混乱させたいくつかの情報があります:
Apache :: DBIモジュールにはまだ制限があります。それは、プロセスごとにデータベース接続を永続的に保ちます。
その間ずっと、ApacheがCGIリクエストをどのように処理するかについての私の概念は
- Apacheは常に新しいプロセスを生成して、着信する新しいCGIリクエストを処理します。PerlインタープリターがPerlスクリプトの実行を終了するたびに、プロセスは停止します。
したがって、Apache :: DBIモジュールがデータベース接続をプロセスごとに永続的に維持することしかできない場合、2番目のCGI要求は、最初のCGI要求によって開かれた接続をどのように再利用できますか?
しかし、私の元の質問に戻ってください。mod_perlでDBIX永続データベース接続を使用するにはどうすればよいですか?
sql - DBIx::Class の複数のテーブルから選択
次の DBIx::Class コードがあります。
次の SQL ステートメントは、上記の DBIx::Class コードに基づいて生成されました。
今、私は4つのテーブルから結果を得たいと思っています。独自の SQL コードを手動で記述します。
上記の SQL ステートメントを DBIx::Class に次のように変換しようとしています。
結果セットでnextを実行しようとすると、「配列参照ではありません」という例外が発生します。DBIx::Class で結合を使用することは許可されていないことに注意してください。リファラーおよびアフィリエイトテーブルは *table*** テーブルと関係がないためです。
DBIx::Class コードを SQL の複数選択テーブルに相当させるにはどうすればよいですか?