ロングテキスト型 (DC2Type:json) の JSON 列を含むテーブルがあります。このテーブルには、Symfony プロジェクトの Doctrine ORM にエンティティがあります。変数 $qb
私が試した (おそらく愚かな) 回避策の 1 つは、列を文字列として扱ってから...
リーリー
たとえば、JSON 列my_data をクエリして、文字列に
id":1, を含む BLOB を検索したい場合、これは非常に奇妙な構文エラーで失敗します。いずれにせよ、JSON フィールドにクエリを実行するのは正しくありませんが、SQL クライアントで LIKE クエリを直接実行すると思いどおりに動作するため、Doctrine でなぜこれが失敗するのかわかりません。
編集: これは MySQL/MariaDB です。
P粉7247375112024-01-07 11:55:28
Doctrine のクエリ言語は非常に限られています。最も基本的/一般的な SQL 関数のみをカバーしており、99% のユースケースには十分ですが、すべてではありません。
MariaDB のバージョンが JSON をネイティブにサポートしている場合 (10.2 以降など)、ネイティブ関数を使用して JSON データを処理できます。 (そうでない場合は、回避策が唯一の選択肢となり、アプリケーションで追加のフィルタリングが必要になる場合があります)。
これらの関数を DQL で使用できるようにするには、自分で関数を定義するか、< /a>scienta/doctrine-json-functions などのサードパーティ ライブラリを実際に使用する必要があります。 (Symfony での使用方法に関するドキュメントがあり、非常に簡単であることに注意してください)。
追加の関数が 1 つだけ必要で、何らかの理由でパッケージ全体が必要ない場合は、その 1 つのクラスをコピーして独自のクラスとして使用できます。あるいは、DQL を無視して SQL を直接記述することもできますが、その場合、オブジェクトに直接マージしたり、他の Doctrine マジックを使用してデータを操作したりすることはできなくなります。ただし、単純な使用例ではこれで十分です。