問題タブ [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.

0 投票する
1 に答える
1673 参照

perl - 接続された sqlite データベースに外部キーを作成するにはどうすればよいですか?

本番環境を模倣したテスト環境として sqlite3 データベースを作成しようとしています。プロダクションのセットアップ方法により、テーブルは複数のスキーマにあります。

DBIx::Class でクラスをセットアップし$schema->storage->dbh_do、データベースをスキーマにアタッチするために使用し$schema-deploy()、データベースを作成するために使用しました。

ただし、2 番目のテーブルに外部キーを作成すると、次のエラーが発生します。

DBIx::Class再現する最も簡単なテストを取り上げるのは次のとおりです。

外部キー句からスキーマを削除すると、テーブルが正常に作成されます。

DBIx::Class を使用して外部スキーマにテーブルを作成するにはどうすればよいですか?

編集: コードの完全なサンプル。

主なスクリプト:

与えられたエラーは次のとおりです。

0 投票する
1 に答える
259 参照

perl - DBIx::Class を使用する場合、インデックスの長さをどのように指定しますか?

私は DBIx::Class を使用しており、次の目的で sqlt_deploy_hook を使用しています。

インデックスを作成したい列の一部はテキスト型であるか、長さが 255 を超える varchars です。次のように長さを指定しない限り、MySQL はテキスト インデックスを好みません。

しかし、SQL::Translator::Schema::Table (add_index メソッドがある) と Index を見ると、長さを指定する方法がわかりません。

次の SQL を生成します。

この:

次の SQL を生成します。

その名前の列がないため、これは機能しません。

これまでは、テキスト列にインデックスを付けないことでこれを回避してきました。ただし、「インストール」時に長い varchar をテキスト列に変換する DBIx::Class::DeploymentHandler を使用しようとしていますが、それらの varchar 列にインデックスを付ける必要があります。

私に何ができる?

0 投票する
1 に答える
261 参照

perl - DBIx::Class - 'FOR UPDATE NOWAIT' のサポートを追加する最良の方法

->select(..., { for => 'update_nowait' })(Oracle用)ステートメントを選択するための「FOR UPDATE NOWAIT」のサポートを追加したい。

DBIx::Class 0.08127を使用しています

DBIx/Class/SQLMaker/Oracle.pm を変更できますが、特に配布ファイルの変更を伴わない場合、別の (推奨される) 方法があるかどうか疑問に思っていました。

0 投票する
1 に答える
208 参照

perl - DBIx::Classで親の代わりにベースを使用する

DBIx :: Classがuse base代わりに使用する理由はありuse parentますか?

たとえばこれを参照してください。

訂正してください私は間違っていますが、use base非推奨ではありませんか?

ありがとう、

0 投票する
1 に答える
242 参照

database - DBIx::Class での操作の設定

DBIx::Class を使用して集合演算を実行する最良の方法は何ですか? クエリに基づいて検索先を作成することが 1 つの解決策であることがわかりましたが、条件はユーザーによって定義されるため、その場で検索先を作成することが最善の答えであるかどうかはわかりません。

基本的に、このタイプのクエリを DBIC に変換する必要があります。ここでcodeattr_namevalueはユーザーによって定義されます。

0 投票する
1 に答える
851 参照

perl - DBIx::ClassのIDのリストを使用した検索

ユーザーが選択したIDのリストがあります。DBIx :: ClassのIDのこのリストを使用してすべての行を検索するための最良の方法は何ですか?

0 投票する
3 に答える
869 参照

perl - Perlのメソッドチェーンのエラーを処理するにはどうすればよいですか?

Perlのメソッドチェーンでスローされた例外を処理するための最良の方法は何ですか?チェーンされたメソッドのいずれかが例外をスローする場合は、0またはundefの値を割り当てたい

コードサンプル:

それを行うための最良の方法は何ですか?毎回try/catch / finalステートメントでラップする必要がありますか?これを適用したいコンテキストは次のとおりです。CatalystとDBICを使用してWeb開発に取り組んでおり、連鎖した結果セットを多数実行しています。この結果セットの一部が例外をスローした場合は、値0またはundefを割り当てて、これを処理します。テンプレートのエラー(テンプレートツールキットを使用しています)。すべての呼び出しをtry/catchでラップせずにそれを行う別の方法がある場合は、私に知らせてください。同じコンテキスト(Catalyst / DBIC / TT)でこのタイプのエラーを処理するためのより良い方法を知っている場合は、提案してください。実用的な例は、ユーザーが何かを検索し、これが存在しない場合です。

0 投票する
1 に答える
1182 参照

perl - リレーションシップを使用して DBIx::Class で検索する

私はDBIx::Classの学習を始めていますが、関連するテーブルを検索することに疑問があります:

次のコードを検討してください。

私が望むのは、 の著者による「タイタニック」という名前の本のみを検索することです$author
この 2 つの検索は同じ結果セットを返しますか?
はいの場合、最善の方法とその理由は何ですか?
いいえの場合、違いは何ですか?

0 投票する
1 に答える
1198 参照

sql - DBIx::Class 結果セット検索で各グループの最新レコードを取得するにはどうすればよいですか?

DBIx::Class結果セット検索でgroup_byを使用しています。各グループに対して返される結果は、常にグループ内の最小 ID を持つ行 (つまり、グループ内で最も古い行) です。代わりに、ID が最も高い行 (つまり、グループ内の最新の行) を取得する方法を探しています。

問題は基本的にこれと同じです: 各グループの最後のレコードを取得する ...生の SQL ではなく DBIx::Class を使用していることを除いて。

質問を文脈に入れるには:

音楽レビューの表があります

特定の artist_id/album_id に対して複数のレビューが存在する可能性があります。日付の降順で、artist_id/album_id ごとに複数のレビューを含まない最新のレビューが必要です。

私はこれを使用してこれをやろうとしました:

これはほとんど機能しますが、最新ではなく、各グループの最も古いレビューを返します。どうすれば最新のものを入手できますか?