2016-07-28 4 views
0

먼저 불량 언어로 불편을 끼쳐 드려 죄송합니다.SQL to QueryBuilder

SELECT DISTINCT U.id 
FROM User U 
INNER JOIN Detail DE on U.id = DE.id_user 
INNER JOIN matiere MA on U.id = MA.id_user 
WHERE DE.ville = $var1 
AND MA.matiere = $var2 

쿼리 빌더 :

나는 (그것을 운영의)이 SQL로 변환하려고합니다. 나는이 시도가 :

$query = $repository->createQuerybuilder('U.id') 
    ->from('User', 'U') 
    ->innerJoin('Detail', 'DE', 'WITH', ' U.id = DE.id_user') 
    ->innerJoin('matiere', 'MA', 'WITH', 'U.id = MA.id_user') 
    ->where('DE.ville = :ville') 
    ->setParameter('ville', $ville) 
    ->andWhere('MA.matiere = :matiere') 
    ->setParameter('matiere', $matiere) 
    ->distinct(); 

을하지만 난이 오류가 있습니다 "[구문 오류] 라인 0, COL 49 : 오류 : '.'문자열의 예상 끝 있어요 "

을 그리고 나는이하려고하면

$query = $repository->createQueryBuilder() 
    ->select('U.id') 
    ->from('User', 'U') 
    ->innerJoin('Detail', 'DE', 'WITH', ' U.id = DE.id_user') 
    ->innerJoin('matiere', 'MA', 'WITH', 'U.id = MA.id_user') 
    ->where('DE.ville = :ville') 
    ->setParameter('ville', $ville) 
    ->andWhere('MA.matiere = :matiere') 
    ->setParameter('matiere', $matiere) 
    ->distinct(); 

내가 가진이 오류 : 나는 교리와 symfony3 작업

Warning: Missing argument 1 for Doctrine\ORM\EntityRepository::createQueryBuilder(), 

합니다.

도움 주셔서 감사합니다.

답변

0

이것은 구문 오류와 같습니다. 쿼리 빌더의 개발 기능으로 쿼리의 자체 인스턴스로, 디버그를 만들고 SQL 쿼리 작성 방법, 구문 오류 가능성을 확인합니다.

$qb = $repository->createQueryBuilder(); 
$query = $qb->getQuery(); 
$debug = $query->debug(); 

은 문자열 사이의 공간을 갖는다 'U.id = DE.id_user'), 가능한 오류를 둘러싸도록 시도 이러한 공백을 제거;

또는이 방법을 시도 할 수 있습니다, 아마 작동 : 당신은 대신에 단지 하나의 목적 및 방법 호출을 전달하려고하는

$query = $repository->createQuerybuilder('U.id') 

:이 라인에서

$query = $repository->createQueryBuilder(); <!--separte constructor this line--> 

    $query->select('U.id') 
    ->from('User', 'U') 
    ->innerJoin('Detail', 'DE', 'WITH', 'U.id = DE.id_user') <!--align this line--> 
    ->innerJoin('matiere', 'MA', 'WITH', 'U.id = MA.id_user') 
    ->where('DE.ville', ':ville') <!--separate this line--> 
    ->setParameter('ville', $ville) 
    ->andWhere('MA.matiere', ':matiere') <!--separate this line--> 
    ->setParameter('matiere', $matiere) 
    ->distinct() 
    ->getQuery(); <!--add this line--> 

    $resp = $query->getResult(); <!--get the answer this line--> 
+0

이 오류는 동일 I 삭제 '(U.id를) 선택'을 시도했다 및 put 'createQuerybuilder ('U.id ');' 및 동일한 오류 ('[구문 오류] 줄 0, 열 49 : 오류 : 문자열의 예상 끝'. ''있어) 어디서 문제인지 이해할 수 없습니다 ... – jomalix

+0

디버그를 했습니까? 변수에서 SQL 쿼리가 어떻게 발생하는지 알고 있어야합니다. SQL 쿼리를 실행할 때 구문 오류가 발생하는 것으로 보입니다. [예상되는 문자열의 끝이 있습니다.''], 어휘 분석기 인 것 같습니다 문자열을 닫고 올바르게 실행하거나 문자 점 []이있는 문자를 기다리는 중입니다. ] SQL 문자열에서 순서가 잘못되어 올바르게 실행되지 않고 오류가 발생합니다. –

0

매개 변수. 왜 그 점에 관한 오류.

$query = $repository->createQuerybuilder($id) 
... 

는 그런 다음 오류가 발생하지 않습니다

$id = U.id 

또는

$id = $U->getId(); 

다음 매개 변수를 전달 : 대신 querybuilder 전에

사용이 ID를 얻으려면 : "[구문 오류] 줄 0, 열 49 : 오류 : 예상되는 문자열 끝, '.' (경고 : 교리에 대한 인수 1 누락 \ ORM \ EntityRepository :: createQueryBuilder()) "나는 당신의 해결책을 시도해보십시오이