반응형
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
반응형
'programing' 카테고리의 다른 글
Vue - 중첩된 개체의 데이터를 표시하려고 할 때 렌더에 오류가 발생했습니다. (0) | 2023.01.14 |
---|---|
JavaScript에서 null 값을 확인하려면 어떻게 해야 합니까? (0) | 2023.01.14 |
고유 값 카운트 (0) | 2023.01.14 |
상위 구성 요소에서 하위 구성 요소로의 이벤트 (0) | 2023.01.14 |
Java 날짜 컷오프 시간 정보 (0) | 2023.01.14 |