SQL到QueryBuilder

时间:2016-07-28 11:16:32

标签: doctrine-orm symfony

首先,抱歉英语不好!

我尝试转换此SQL(它可以运行):

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
查询生成器中的

。 我试过这个:

$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行,第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();

我有这个错误:

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

我使用doctrine和symfony3。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这就像语法错误一样,查询构建器中的开发功能都是查询的自己的实例,尝试进行调试并查看SQL查询是如何构建的,可能是语法错误。

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

在字符串['U.id = DE.id_user')]之间有一个空格,删除这些空格以试图包围可能的错误;

或者您可以尝试这样做,可能有效:

  $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-->

答案 1 :(得分:0)

在这一行:

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

您正在尝试传递对象和方法调用,而不是仅传递单个参数。这就是为什么关于点的错误。

在querybuilder之前使用它来获取ID:

$id = U.id

$id = $U->getId();

然后传入参数:

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

然后你不会得到错误:&#34; [语法错误]第0行,第49栏:错误:字符串的预期结束,得到&#39;。&#39; &#34;