[英]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.