亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Doctrineクエリビルダーを使用してJSON列のフィールドに基づいて選択する方法
P粉423694341
P粉423694341 2024-01-06 16:58:30
0
1
698

ロングテキスト型 (DC2Type:json) の JSON 列を含むテーブルがあります。このテーブルには、Symfony プロジェクトの Doctrine ORM にエンティティがあります。変數(shù) $qb

の Doctrine クエリ ビルダーを使用して、JSON 列內(nèi)のフィールドに基づいてクエリを?qū)g行したいと考えています ###どうすればいいですか?私がオンラインで見つけたものはすべて、この機能を有効にするにはサードパーティのパッケージをインストールする必要があると記載されています。別のパッケージをインストールせずにDoctrineのクエリビルダーだけを使用してそれを行う方法はありますか?

私が試した (おそらく愚かな) 回避策の 1 つは、列を文字列として扱ってから...

リーリー

たとえば、JSON 列

my_data をクエリして、文字列に id":1, を含む BLOB を検索したい場合、これは非常に奇妙な構(gòu)文エラーで失敗します。いずれにせよ、JSON フィールドにクエリを?qū)g行するのは正しくありませんが、SQL クライアントで LIKE クエリを直接実行すると思いどおりに動作するため、Doctrine でなぜこれが失敗するのかわかりません。 編集: これは MySQL/MariaDB です。

P粉423694341
P粉423694341

全員に返信(1)
P粉724737511

Doctrine のクエリ言語は非常に限られています。最も基本的/一般的な SQL 関數(shù)のみをカバーしており、99% のユースケースには十分ですが、すべてではありません。

MariaDB のバージョンが JSON をネイティブにサポートしている場合 (10.2 以降など)、ネイティブ関數(shù)を使用して JSON データを処理できます。 (そうでない場合は、回避策が唯一の選択肢となり、アプリケーションで追加のフィルタリングが必要になる場合があります)。

これらの関數(shù)を DQL で使用できるようにするには、自分で関數(shù)を定義するか、scienta/doctrine-json-functions などのサードパーティ ライブラリを?qū)g際に使用する必要があります。 (Symfony での使用方法に関するドキュメントがあり、非常に簡単であることに注意してください)。

追加の関數(shù)が 1 つだけ必要で、何らかの理由でパッケージ全體が必要ない場合は、その 1 つのクラスをコピーして獨自のクラスとして使用できます。

あるいは、DQL を無視して SQL を直接記述することもできますが、その場合、オブジェクトに直接マージしたり、他の Doctrine マジックを使用してデータを操作したりすることはできなくなります。ただし、単純な使用例ではこれで十分です。

最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート