首先,抱歉英语不好!
我尝试转换此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。
感谢您的帮助。
答案 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;