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

如何使用Doctrine查詢建構(gòu)器基於JSON列中的欄位進(jìn)行選擇
P粉423694341
P粉423694341 2024-01-06 16:58:30
0
1
695

我有一個(gè)有 JSON 欄位的表,它的類型是 longtext (DC2Type:json)。表格在我的 Symfony 專案中的 Doctrine ORM 中有一個(gè)實(shí)體。我想使用變數(shù) $qb

中的 Doctrine 查詢建構(gòu)器基於 JSON 列內(nèi)的欄位進(jìn)行查詢

我該怎麼做?我在網(wǎng)路上找到的所有內(nèi)容都說要安裝第 3 方軟體包才能啟用此功能。有沒有辦法只使用 Doctrine 的查詢產(chǎn)生器而不安裝另一個(gè)套件來完成它?

我嘗試過的一個(gè)(也許是愚蠢的)解決方法是將列視為字串,然後...

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

例如,如果我想查詢JSON 列my_data 以查找字串中包含id":1, 的blob。這會(huì)失敗,並出現(xiàn)非常奇怪的語法錯(cuò)誤,並且不正確無論如何,查詢JSON 欄位的方法。但是,直接在SQL 用戶端中執(zhí)行LIKE 查詢可以按照我想要的方式工作,所以我也不知道為什麼這在Doctrine 中失敗。

編輯:這是 MySQL / MariaDB。

P粉423694341
P粉423694341

全部回覆(1)
P粉724737511

Doctrine 查詢語言非常有限。它僅涵蓋最基本/常見的 SQL 函數(shù),足以滿足 99% 的用例,但不是全部。

如果您的 MariaDB 版本本身支援 JSON(例如 10.2 或更高版本),您可以使用 原生函數(shù)來處理 JSON 資料。 (如果您不這樣做,那麼您的解決方法是唯一的選擇,可能需要在應(yīng)用程式中進(jìn)行一些額外的過濾)。

為了能夠在DQL 中使用這些函數(shù),您需要自己定義它們 或確實(shí)使用第三方函式庫,例如scienta/doctrine-json-functions (請(qǐng)注意,有關(guān)如何將它與Symfony 一起使用的文檔,非常簡(jiǎn)單)。

如果您只需要一個(gè)額外的函數(shù),並且出於某種原因不需要整個(gè)套件,您可以複製該單一類別並將其用作您自己的類別。

或者,您可以放棄 DQL 並直接編寫 SQL,但這樣您就無法直接合併為物件並使用其他 Doctrine 魔法來處理資料。但對(duì)於簡(jiǎn)單的用例來說這已經(jīng)足夠了。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板