問題タブ [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 投票する
6 に答える
4125 参照

sql - 「=」以外の演算子を使用して DBIx::Class 結合テーブルを作成するにはどうすればよいですか?

概要

ペアになっているアイテムの表があります。単一のクエリでペアの両側を取得できるように、自己結合したいと思います。これは有効な SQL (だと思います) であり、SQLite エンジンは実際にそれを受け入れますが、DBIx::Class が弾丸を噛むのに苦労しています。

最小限の例

最後の行は、次の SQL を生成します。

DBIx::Class 結合構文を使用して と の間の演算子を取得しようとしてい<>ますが、これまでのところうまくいきませんでした。dual.half_idme.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 つのサイズですべてに適合する」検索式が見つからなかったため、複合パスではなく結合/関係パスに固執しています。

更新が遅い

2 年後に私自身の質問に答えたところ、以前は欠落していた機能が実装されていました。

0 投票する
4 に答える
748 参照

perl - Gmail スタイルの高度な検索構文を解析していますか?

Perl を使用して、Gmail が提供するものと同様の検索文字列を解析したいと考えています。入力例は、「tag:thing by:{user1 user2} {-tag:a by:user3}」です。のような木構造に入れたい

一般的な規則は次のとおりです。

  1. スペースで区切られたトークンは、デフォルトで AND 演算子になります。
  2. 中括弧内のトークンは代替オプション (OR) です。中かっこは、フィールド指定子の前後に配置できます。つまり、「by:{user1 user2}」と「{by:user1 by:user2}」は同等です。
  3. ハイフンで始まるトークンは除外されます。

これらの要素は、結合してネストすることもできます。たとえば、「{by:user5 -{tag:k by:user3}} など」です。

これらの規則を表す文脈自由文法を書き、それをツリーに解析することを考えています。これは不要ですか?(これは単純な正規表現を使用して可能ですか?)

文脈自由文法の解析に推奨されるモジュールは?

(最終的に、これは DBIx::Class でデータベースクエリを生成するために使用されます。)

0 投票する
4 に答える
2315 参照

perl - DBIx :: Classには透過的なキャッシュがありますか?

C#/。Netの世界には、透過キャッシュを含むNHibernateやActiveRecordなどのORMがあります。データベースの更新は透過的にキャッシュに複製され、オブジェクトは利用可能な場合はキャッシュから直接取得されます(多くの場合memcachedを使用)。

透過的なキャッシュがDBIx::Classを使用するPerlで利用できるようには見えません。私は何か見落としてますか?それは一般的なニーズのようですが、CPANやGoogleで何も見つからなかったのには驚いています。

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

perl - DBIx::Class のリンク テーブルから値を取得するにはどうすればよいですか?

私のアプリには、books と tags という 2 つのテーブルと、リンク テーブル book_tags があります。リンク テーブルには、書籍がこの特定のタグでタグ付けされた回数も含まれています。次のようにしてタグを追加できます

ただし、本のタグを取得すると

リンクテーブルから値を返していないようです。

手動で行わずにリンク テーブルから値を取得する方法はありますか?

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

perl - DBIx::Classについて最もよく議論されている本は?

DBIx::Class ORM が、この主題に関する本全体を正当化するのに十分なほど充実しているかどうかはわかりませんが、DBIx::Class ORM の詳細を説明している本を推薦してもらいたいです。

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

perl - DBIx::Class を UTF-8 で照合するにはどうすればよいですか?

DBIx::Class::Resultsetを使用して MySQL データベースに Web 検索機能を実装しようとしています。「ü」を検索すると、MySQL は「u」として (つまり、ウムラウトなしで) 検索を実行します。他の「拡張 ASCII」文字についても同じことが行われます。テーブルと接続は UTF8 です。

データベースでいくつかのテストを行ったところ、解決策が見つかりました。次のように、where 句に「collat​​e utf8_bin」を追加します。

しかし、これを DBIx::Class でどのように実装すればよいのでしょうか? 私の検索では、1 つのクエリで 2 つのテーブルに対して 'WHERE ... LIKE' が実行されます。

前もって感謝します、

マウリッツ

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

sql - DBIx::Class 結果クラスと実際のテーブル

私は DBIx クラスを勉強していますが、これまでのデータベースとの対話は PHP コードでの単純な SQL クエリだったので、少し混乱しています。

とにかく、私が理解しているように、クラスはデータベースと直接対話するのではなく、結果クラスで定義されたスキーマで動作します。スキーマは、さまざまな .pm クラスを介して手動で構築するか、Loader クラスを介してデータベースから取得することができます。

私の質問は次のとおりです。これに対する好ましいアプローチは何ですか? 結果クラスを手動で構築してからデータベースを変更するとどうなりますか? テーブルとクラスの両方を編集する必要があると思いますが、少し非現実的ではありませんか?

ありがとう

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

perl - DBIx :: Classが、まだ挿入されていない新しい行に関連するすべてのものを呼び出さないようにしますか?

スキーマに親子関係があります。非常によく似たコードを使用して、既存の親を変更し、新しい親を作成したいと思います。編集ケースは子供を見つけるのが簡単です:

ただし、新しいケースでは、何か奇妙なことが起こります。

私は@children空でなければならないと思っていましたが、代わりに親に関係なくすべての子供を取り戻しました。

私はこのようなことをすることができます(関連するレコードアクセサーごとに、vomit):

上記はそうではないので、これを行う正しい方法を教えてください。

バージョン: 0.08010、これはDebian Lennyが持っているもの(および本番サーバーが実行しているもの)だからです

0 投票する
5 に答える
3512 参照

perl - DBIx::Class で副選択する方法は?

DBIx::Class から始めて、DBIx::Class に入れたいサブセレクトがありますが、混乱してコードをビルドできません。

私のMySQLの選択はこれです:

DBIx::Class は副選択をサポートしていないことを読みました。本当?もしそうなら、あなたはこのような状況で何をしますか?

0 投票する
2 に答える
836 参照

mysql - DBIx::Classの右側のMySQL関数

DBIx :: Classで、次の構文を使用してクエリを生成すると、次のようになります。

生成されたクエリは、右側の関数が引用符で囲まれていることを除けば完璧です。

それが引用されていなければ、それは正しいでしょう。どうすればいいですか?

ありがとう、ロブ