2017-10-06 5 views
0

트리 구조를 가지고 있으며, Gedmo\Tree에 의해 관리됩니다. 하위 트리에서 한 필드에 대해 복잡한 업데이트를 만들고 싶습니다.이 업데이트는 다른 테이블과의 조인이 필요하며 DQL에서 지원하지 않습니다. 그래서 Gedmo\Tree 저장소 방법 childrenQueryBuilder에 의해 DQL 빌더를 얻고, 그것을 QueryBuilder으로 변환하고 update 문을 추가하려고합니다.DQL 쿼리 작성기를 쿼리 작성기로 변환 할 수 있습니까?

$dqlQueryBuilder = $repository->childrenQueryBuilder($node, ...); 
$dqlQueryBuilder->resetDQLParts(['select', 'orderBy']); 
$queryBuilder = convert($dqlQueryBuilder); 
$queryBuilder->leftJoin('...', 'lj'); 
$queryBuilder->update('node.update', 'concat(node.field, lj.field)'); 

나는 이러한 변환은 교리 내장 도구 나 일부 3 번째 파티 라이브러리에 의해 가능하면 난 그냥 궁금, 내가 정의 QueryBuilder을 쓸 수 있다는 것을 알고있다.

+0

DQL에서 사용자 정의 DB 기능이 작동하는 방법에 대한

확인 documentation 당신은 DQL을 게시 할 수 있습니까? 아니면 단순화 된 버전일까요? –

+0

예, OP –

답변

0

Doctrine에는 SQLQueryBuilder와 같은 것이 없으며 DQL 쿼리 작성기 인 QueryBuilder 만 있습니다. 당신이 할 수있는 일은 당신이 네이티브 SQL로 재생 한 다음 원시 SQL로 실행할 수를 일단

$stringSql = $queryBuilder->getQuery() 
    ->getSQL(); 

을 수행하여 SQLDQL을 변환하는 것입니다.

참고 : 당신이 무슨 뜻 정확히 무엇을 DB 특정 문 모르겠지만, FunctionNode 클래스를 이용하여 DQL하는 DB 특정 기능을 매핑 할 가능성이있다. 함수를 DQL로 매핑하면 DQL로만 수행 할 수 있습니다.

+0

을 SQL 쿼리 작성기에 대해 올바르지 않게 업데이트했습니다. SQL 쿼리 빌더 ='\ Doctrine \ DBAL \ Query \ QueryBuilder' https://github.com/doctrine/dbal/blob/master/lib/Doctrine/DBAL/Query/QueryBuilder.php –

관련 문제