programing

Symfony 2: 교리 쿼리 작성기가 있는 관련 없는 테이블의 내부 조인

css3 2023. 10. 17. 20:26

Symfony 2: 교리 쿼리 작성기가 있는 관련 없는 테이블의 내부 조인

저는 다음과 같이 연관되지 않은 테이블에 합류하는 교리 쿼리 작성기를 사용하여 쿼리를 구축하려고 합니다.

$query = $this->createQueryBuilder('gpr')
        ->select('gpr, p')
        ->innerJoin('TPost', 'p')
        ->where('gpr.contentId = p.contentId')

근데 이게 안 돼요.여전히 오류가 발생합니다.

오류: 가입 경로 식을 사용했지만 이전에 정의되지 않은 식별 변수 Tpost입니다.

이 오류 메시지를 검색해보니 모두 p.some Attribute처럼 table alias + attribute를 사용하라고 답했습니다.하지만 가입하고 싶은 테이블은 선택한 테이블과 관련이 없습니다.

일반적인 mysql 쿼리로서 나는 다음과 같이 쓸 것입니다.

SELECT * FROM t_group_publication_rel gpr 
INNER JOIN t_post p 
WHERE gpr.content_id = p.content_id

제가 뭘 잘못하고 있는지 아시겠어요?

오늘 저는 비슷한 작업을 하다가 이 문제를 열었다는 것을 기억했습니다.어떤 독트린 버전에서 작동하는지는 모르겠지만 지금은 상속 매핑에서 자식 클래스에 쉽게 참여할 수 있습니다.따라서 이와 같은 쿼리는 아무런 문제 없이 작동합니다.

$query = $this->createQueryBuilder('c')
        ->select('c')
        ->leftJoin('MyBundleName:ChildOne', 'co', 'WITH', 'co.id = c.id')
        ->leftJoin('MyBundleName:ChildTwo', 'ct', 'WITH', 'ct.id = c.id')
        ->orderBy('c.createdAt', 'DESC')
        ->where('co.group = :group OR ct.group = :group')
        ->setParameter('group', $group)
        ->setMaxResults(20);

상속 매핑을 사용하는 부모 클래스에서 쿼리를 시작합니다.이전 게시물에서는 출발점이 달랐지만 제 기억이 맞다면 같은 문제였습니다.

제가 이 문제를 시작할 때 큰 문제였기 때문에 모르는 사람들에게도 흥미로울 수 있다고 생각합니다.

연결되지 않은 엔티티 사이의 조인은 버전 2.4까지 할 수 없었습니다. 여기서 다음 구문으로 임의 조인을 생성할 수 있습니다.

$query = $em->createQuery('SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email');

참조 : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html

$dql = "SELECT 
    a, md.fisrtName , md.LastName, mj
    FROM MembersBundle:Memberdata md
        INNER JOIN MembersBundle:Address a WITH md = a.empID
        INNER JOIN MembersBundle:Memberjob mj WITH md = mj.memberData
            ...
    WHERE
        a.dateOfChange IS NULL
    AND WHERE
        md.someField = 'SomeValue'";

return $em->createQuery( $dql )->getResult();

DQL 조인은 연결이 매핑에 정의된 경우에만 작동합니다.사용자의 경우 기본 쿼리를 수행하고 ResultSetMapping을 사용하여 개체를 채우는 것이 훨씬 쉽다고 생각합니다.

언급URL : https://stackoverflow.com/questions/11116428/symfony-2-inner-join-on-non-related-table-with-doctrine-query-builder