我正在尝试获取时间表,将 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) https://mariadb.com/kb/en/incompatibilities-and-feature-differences-between-mariadb-105-and-mysql-80/#incompatibilities:
MariaDB 10.5 不支持 MySQL 的 JSON 运算符(-> 和 ->>)。
“没有如果,没有但是”。
我想你可以使用正则表达式替换来编辑 Laravel 生成的 SQL就在之前SQL 被执行了,但是执行起来相当困难,而且看起来太老套了,不值得。相比之下,原始的 where 查询并没有那么难看:
$table->whereRaw('JSON_VALUE(schedule_with, ?) = ?', ['$.company_person', 3])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)