問題タブ [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.
sql - 「=」以外の演算子を使用して DBIx::Class 結合テーブルを作成するにはどうすればよいですか?
概要
ペアになっているアイテムの表があります。単一のクエリでペアの両側を取得できるように、自己結合したいと思います。これは有効な SQL (だと思います) であり、SQLite エンジンは実際にそれを受け入れますが、DBIx::Class が弾丸を噛むのに苦労しています。
最小限の例
最後の行は、次の SQL を生成します。
DBIx::Class 結合構文を使用して と の間の演算子を取得しようとしてい<>
ますが、これまでのところうまくいきませんでした。dual.half_id
me.half_id
私が試したこと
ドキュメントは、SQL::Abstract に似た構文を示唆しています。
私はそのような関係を書いてみましたhas_one
:
stringref の背後にある単純な SQL でも、次のようにはなりません。
回避策と、それらが不十分な理由
search()
複雑な呼び出しで正しい SQL を生成することができましたが、定義された関係はありませんでした。ハードコードされた SQL が多すぎて、かなり醜いです。関係がトラバースされる特定のケースごとに、因数分解できない方法で模倣する必要があります。
other_half_id
列を追加してそれに参加することで、問題を回避でき=
ます。明らかに冗長なデータです。
専用のビュー ( CREATE VIEW AS SELECT *, opposite_of(side) AS dual FROM half...
)を介して冗長性を追加することで、この冗長性を回避しようとさえしましたsearch()
。結局、私はそれを機能させる勇気がありませんでした。
希望のSQL
これが私が探している種類のSQLです。これは一例に過ぎないことに注意してください。関係を介して実行したいので、 's句Half
に加えて ResultSet アクセサーとしても使用できます。search()
join
補足事項
完全に拡張されたケースでも実際に自分自身に参加していますが、それが問題ではないと確信しています。コードサイズを小さく保つのにも役立つため、ここではケースを縮小するためにこの方法を採用しました。
search()
関連付けには複数の用途があり、「1 つのサイズですべてに適合する」検索式が見つからなかったため、複合パスではなく結合/関係パスに固執しています。
更新が遅い
perl - Gmail スタイルの高度な検索構文を解析していますか?
Perl を使用して、Gmail が提供するものと同様の検索文字列を解析したいと考えています。入力例は、「tag:thing by:{user1 user2} {-tag:a by:user3}」です。のような木構造に入れたい
一般的な規則は次のとおりです。
- スペースで区切られたトークンは、デフォルトで AND 演算子になります。
- 中括弧内のトークンは代替オプション (OR) です。中かっこは、フィールド指定子の前後に配置できます。つまり、「by:{user1 user2}」と「{by:user1 by:user2}」は同等です。
- ハイフンで始まるトークンは除外されます。
これらの要素は、結合してネストすることもできます。たとえば、「{by:user5 -{tag:k by:user3}} など」です。
これらの規則を表す文脈自由文法を書き、それをツリーに解析することを考えています。これは不要ですか?(これは単純な正規表現を使用して可能ですか?)
文脈自由文法の解析に推奨されるモジュールは?
(最終的に、これは DBIx::Class でデータベースクエリを生成するために使用されます。)
perl - DBIx :: Classには透過的なキャッシュがありますか?
C#/。Netの世界には、透過キャッシュを含むNHibernateやActiveRecordなどのORMがあります。データベースの更新は透過的にキャッシュに複製され、オブジェクトは利用可能な場合はキャッシュから直接取得されます(多くの場合memcachedを使用)。
透過的なキャッシュがDBIx::Classを使用するPerlで利用できるようには見えません。私は何か見落としてますか?それは一般的なニーズのようですが、CPANやGoogleで何も見つからなかったのには驚いています。
perl - DBIx::Class のリンク テーブルから値を取得するにはどうすればよいですか?
私のアプリには、books と tags という 2 つのテーブルと、リンク テーブル book_tags があります。リンク テーブルには、書籍がこの特定のタグでタグ付けされた回数も含まれています。次のようにしてタグを追加できます
ただし、本のタグを取得すると
リンクテーブルから値を返していないようです。
手動で行わずにリンク テーブルから値を取得する方法はありますか?
perl - DBIx::Classについて最もよく議論されている本は?
DBIx::Class ORM が、この主題に関する本全体を正当化するのに十分なほど充実しているかどうかはわかりませんが、DBIx::Class ORM の詳細を説明している本を推薦してもらいたいです。
perl - DBIx::Class を UTF-8 で照合するにはどうすればよいですか?
DBIx::Class::Resultsetを使用して MySQL データベースに Web 検索機能を実装しようとしています。「ü」を検索すると、MySQL は「u」として (つまり、ウムラウトなしで) 検索を実行します。他の「拡張 ASCII」文字についても同じことが行われます。テーブルと接続は UTF8 です。
データベースでいくつかのテストを行ったところ、解決策が見つかりました。次のように、where 句に「collate utf8_bin」を追加します。
しかし、これを DBIx::Class でどのように実装すればよいのでしょうか? 私の検索では、1 つのクエリで 2 つのテーブルに対して 'WHERE ... LIKE' が実行されます。
前もって感謝します、
マウリッツ
sql - DBIx::Class 結果クラスと実際のテーブル
私は DBIx クラスを勉強していますが、これまでのデータベースとの対話は PHP コードでの単純な SQL クエリだったので、少し混乱しています。
とにかく、私が理解しているように、クラスはデータベースと直接対話するのではなく、結果クラスで定義されたスキーマで動作します。スキーマは、さまざまな .pm クラスを介して手動で構築するか、Loader クラスを介してデータベースから取得することができます。
私の質問は次のとおりです。これに対する好ましいアプローチは何ですか? 結果クラスを手動で構築してからデータベースを変更するとどうなりますか? テーブルとクラスの両方を編集する必要があると思いますが、少し非現実的ではありませんか?
ありがとう
perl - DBIx :: Classが、まだ挿入されていない新しい行に関連するすべてのものを呼び出さないようにしますか?
スキーマに親子関係があります。非常によく似たコードを使用して、既存の親を変更し、新しい親を作成したいと思います。編集ケースは子供を見つけるのが簡単です:
ただし、新しいケースでは、何か奇妙なことが起こります。
私は@children
空でなければならないと思っていましたが、代わりに親に関係なくすべての子供を取り戻しました。
私はこのようなことをすることができます(関連するレコードアクセサーごとに、vomit):
上記はそうではないので、これを行う正しい方法を教えてください。
バージョン: 0.08010、これはDebian Lennyが持っているもの(および本番サーバーが実行しているもの)だからです
perl - DBIx::Class で副選択する方法は?
DBIx::Class から始めて、DBIx::Class に入れたいサブセレクトがありますが、混乱してコードをビルドできません。
私のMySQLの選択はこれです:
DBIx::Class は副選択をサポートしていないことを読みました。本当?もしそうなら、あなたはこのような状況で何をしますか?
mysql - DBIx::Classの右側のMySQL関数
DBIx :: Classで、次の構文を使用してクエリを生成すると、次のようになります。
生成されたクエリは、右側の関数が引用符で囲まれていることを除けば完璧です。
それが引用されていなければ、それは正しいでしょう。どうすればいいですか?
ありがとう、ロブ