programing

mariadb에서 -> 연산자를 사용하여 JSON 열을 조회하는 방법

minecode 2023. 1. 14. 09:46
반응형

mariadb에서 -> 연산자를 사용하여 JSON 열을 조회하는 방법

Laravel 프로젝트에서 json 열 데이터를 다음 코드와 비교하는 일정을 가져오려고 합니다.

$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;

동작시키기 위해 Larabel에서 필요한 설정 변경이 있습니까?

raw 쿼리로 달성할 수 있다는 것을 알고 있는데, 제가 뭘 놓쳤는지 궁금하네요.

감사해요.

아니요, 이것을 유효하게 하기 위해서 실시할 수 있는 설정 변경은 없습니다.

10.5와 MySQL(8)의 차이에 대한 MariaDB의 문서를 인용하면 다음과 같습니다.

MariaDB 10.5는 MySQL의 JSON 연산자(-> 및 ->>)를 지원하지 않습니다.

"만약도 없고, 하지만"


SQL 실행 직전에 Laravel이 생성하는 SQL을 편집하는 정규 표현 치환으로 할 수 있을 것 같습니다만, 둘 다 실행이 어렵고, 그럴 가치가 없을 것 같습니다.반면 raw where 쿼리는 보기 흉하지 않습니다.

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

언급URL : https://stackoverflow.com/questions/67738740/how-to-query-a-json-column-using-the-operator-in-mariadb

반응형