찾다

 >  Q&A  >  본문

Doctrine 쿼리 빌더를 사용하여 JSON 열의 필드를 기반으로 선택하는 방법

longtext(DC2Type:json) 유형의 JSON 열이 있는 테이블이 있습니다. 테이블에는 내 Symfony 프로젝트의 Doctrine ORM에 엔터티가 있습니다. 변수 $qb

에서 Doctrine 쿼리 빌더를 사용하여 JSON 열 내의 필드를 기반으로 쿼리하고 싶습니다.

어떻게 해야 하나요? 온라인에서 찾은 모든 내용에는 이 기능을 활성화하려면 타사 패키지를 설치하라는 내용이 나와 있습니다. 다른 패키지를 설치하지 않고 Doctrine의 쿼리 빌더만 사용하여 이를 수행할 수 있는 방법이 있습니까?

내가 시도한 한 가지(어쩌면 어리석은) 해결 방법은 열을 문자열로 처리한 다음...

으아악

예를 들어 Blob에 대한 JSON 열 my_data 以查找字符串中包含 id":1,을 쿼리하려는 경우입니다. 이것은 매우 이상한 구문 오류로 인해 실패하며 어쨌든 JSON 필드를 쿼리하는 올바른 방법이 아닙니다. 그러나 SQL 클라이언트에서 LIKE 쿼리를 직접 실행하면 내가 원하는 방식으로 작동하므로 Doctrine에서도 이것이 실패하는 이유를 모르겠습니다.

편집: 이것은 MySQL/MariaDB입니다.

P粉423694341P粉423694341356일 전570

모든 응답(1)나는 대답할 것이다

  • P粉724737511

    P粉7247375112024-01-07 11:55:28

    교리 쿼리 언어는 매우 제한적입니다. 가장 기본적이고 일반적인 SQL 함수만 다루며, 이는 99%의 사용 사례에 충분하지만 전부는 아닙니다.

    MariaDB 버전이 기본적으로 JSON을 지원하는 경우(예: 10.2 이상) 기본 함수를 사용하여 JSON 데이터를 처리할 수 있습니다. (그렇지 않은 경우 해결 방법이 유일한 옵션이며 애플리케이션에서 추가 필터링이 필요할 수 있습니다.)

    DQL에서 이러한 함수를 사용하려면 직접 정의< /a>하거나 실제로 scienta/doctrine-json-functions와 같은 타사 라이브러리를 사용해야 합니다. (사용 방법에 대한 문서가 있습니다. Symfony, 그리고 그것은 매우 간단합니다).

    하나의 추가 기능만 필요하고 어떤 이유로 전체 패키지가 필요하지 않은 경우 해당 단일 클래스를 복사하여 자신의 클래스로 사용할 수 있습니다.

    또는 DQL을 버리고 SQL을 직접 작성할 수도 있지만, 그러면 개체에 직접 병합할 수 없고 다른 Doctrine 마법을 사용하여 데이터를 처리할 수 없습니다. 그러나 간단한 사용 사례에서는 이것으로 충분합니다.

    회신하다
    0
  • 취소회신하다