longtext(DC2Type:json) 유형의 JSON 열이 있는 테이블이 있습니다. 테이블에는 내 Symfony 프로젝트의 Doctrine ORM에 엔터티가 있습니다. 변수 $qb
어떻게 해야 하나요? 온라인에서 찾은 모든 내용에는 이 기능을 활성화하려면 타사 패키지를 설치하라는 내용이 나와 있습니다. 다른 패키지를 설치하지 않고 Doctrine의 쿼리 빌더만 사용하여 이를 수행할 수 있는 방법이 있습니까?
내가 시도한 한 가지(어쩌면 어리석은) 해결 방법은 열을 문자열로 처리한 다음...
으아악예를 들어 Blob에 대한 JSON 열 my_data
以查找字符串中包含 id":1,
을 쿼리하려는 경우입니다. 이것은 매우 이상한 구문 오류로 인해 실패하며 어쨌든 JSON 필드를 쿼리하는 올바른 방법이 아닙니다. 그러나 SQL 클라이언트에서 LIKE 쿼리를 직접 실행하면 내가 원하는 방식으로 작동하므로 Doctrine에서도 이것이 실패하는 이유를 모르겠습니다.
편집: 이것은 MySQL/MariaDB입니다.
교리 쿼리 언어는 매우 제한적입니다. 가장 기본적이고 일반적인 SQL 함수만 다루며, 이는 99%의 사용 사례에 충분하지만 전부는 아닙니다.
MariaDB 버전이 기본적으로 JSON을 지원하는 경우(예: 10.2 이상) 기본 함수를 사용하여 JSON 데이터를 처리할 수 있습니다. (그렇지 않은 경우 해결 방법이 유일한 옵션이며 애플리케이션에서 추가 필터링이 필요할 수 있습니다.)
DQL에서 이러한 함수를 사용하려면 직접 정의하거나 실제로 scienta/doctrine-json-functions와 같은 타사 라이브러리를 사용해야 합니다. (사용 방법에 대한 문서가 있습니다. Symfony, 그리고 그것은 매우 간단합니다).
하나의 추가 기능만 필요하고 어떤 이유로 전체 패키지가 필요하지 않은 경우 해당 단일 클래스를 복사하여 자신의 클래스로 사용할 수 있습니다.
또는 DQL을 버리고 SQL을 직접 작성할 수도 있지만, 그러면 개체에 직접 병합할 수 없고 다른 Doctrine 마법을 사용하여 데이터를 처리할 수 없습니다. 그러나 간단한 사용 사례에서는 이것으로 충분합니다.