簡體   English   中英

如何使用 mariadb 中的 -> 運算符查詢 JSON 列

[英]How to query a JSON column using the -> operator in mariadb

我正在嘗試獲取將 json 列數據與 Laravel 項目中的以下代碼進行比較的時間表:

$schedules = Schedule::where('schedule_with->company_person', $contact_company_person->id)->get();

這會生成 SQL 查詢,如下所示:

select * from `schedules` where `schedule_with`->'$."company_person"' = 1;

雖然這適用於 MYSQL 5.7 及更高版本,但不適用於 MARIADB 10.5。 但是 MARIADB 從 10.2 開始已經支持 JSON 列。 對於 MARIADB,以下查詢有效:

select * from schedules where JSON_Value(schedule_with, "$.company_person") = 3;

Laravel 中是否需要進行一些配置更改才能使其正常工作?

我知道它可以通過原始查詢來實現,我很好奇我錯過了什么?

謝謝,

不,您無法進行任何配置更改來啟用此功能。

引用 MariaDB 關於10.5 和 MySQL (8) 之間差異的文檔:

MariaDB 10.5 不支持 MySQL 的 JSON 運算符(-> 和 ->>)。

“沒有如果,沒有但是”。


我想您可以使用正則表達式替換來編輯 Laravel 在 SQL 執行之前生成的 SQL ,但這似乎太難執行了。 相比之下,原始的 where 查詢並沒有那么難看:

$table->whereRaw('JSON_VALUE(schedule_with, ?) = ?', ['$.company_person', 3])

暫無
暫無

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

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