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

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

我有一個(gè)帶有 JSON 列的表,它的類(lèi)型為 longtext (DC2Type:json)。該表在我的 Symfony 項(xiàng)目中的 Doctrine ORM 中有一個(gè)實(shí)體。我想使用變量 $qb

中的 Doctrine 查詢(xún)構(gòu)建器基于 JSON 列內(nèi)的字段進(jìn)行查詢(xún)

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

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

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

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

編輯:這是 MySQL / MariaDB。

P粉423694341
P粉423694341

全部回復(fù)(1)
P粉724737511

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

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

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

如果您只需要一個(gè)額外的函數(shù),并且出于某種原因不需要整個(gè)包,您可以復(fù)制該單個(gè)類(lèi)并將其用作您自己的類(lèi)。

或者,您可以放棄 DQL 并直接編寫(xiě) SQL,但這樣您就無(wú)法直接合并為對(duì)象并使用其他 Doctrine 魔法來(lái)處理數(shù)據(jù)。但對(duì)于簡(jiǎn)單的用例來(lái)說(shuō)這已經(jīng)足夠了。

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