簡體   English   中英

Doctrine Query builder - 如何根據 JSON 列中的字段進行選擇

[英]Doctrine Query builder - how to select based on field inside JSON column

我有一個帶有 JSON 列的表,它的類型是 longtext (DC2Type:json)。 這個表在我的 Symfony 項目中有一個 Doctrine ORM 中的實體。 我想基於 JSON 列中的字段進行查詢,使用我在變量$qb中的 Doctrine 查詢生成器

我該怎么做呢? 我在網上找到的所有東西都說要安裝一個 3rd-party 包來啟用它。 有沒有辦法只使用 Doctrine 的查詢生成器而不安裝另一個包?

我嘗試的一個(可能是愚蠢的)解決方法是將列視為字符串,然后...

$qb->andWhere("my_data LIKE \"%id:\\\"1,%\"");

例如,如果我想查詢 JSON 列my_data以查找字符串中包含id":1,的 blob。這會失敗並出現一個非常奇怪的語法錯誤,並且無論如何都不是查詢 JSON 字段的正確方法。但是,直接在 SQL 客戶端中執行 LIKE 查詢以我想要的方式工作,所以我也不知道為什么這在 Doctrine 中失敗了。

編輯:這是 MySQL / MariaDB。

教義查詢語言非常有限。 它僅涵蓋最基本/最常見的 SQL 函數,這對於 99% 的用例來說已經足夠了,但不是全部。

如果您有原生支持 JSON 的 MariaDB 版本(所以 10.2 或更高版本),您可以使用原生函數來處理 JSON 數據。 (如果您不這樣做,那么您的解決方法是唯一的選擇,可能會在應用程序中進行一些額外的過濾)。

為了能夠在 DQL 中使用這些函數,您要么需要自己定義它們,要么確實使用第三方庫,如scienta/doctrine-json-functions (請注意,它有關於如何在 Symfony 中使用它的文檔,而且非常簡單) .

如果您只需要一個額外的功能並且由於某種原因不想要整個捆綁包,您可以復制該單個類並將其用作您自己的。

或者,您可以放棄 DQL 並直接編寫 SQL,但這樣您就不能直接水合到對象中,也不能對數據使用其他 Doctrine 魔法。 但這對於簡單的用例就足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM