我需要实施分页。看来,Doctrine并不支持某些联合会。
这是我的问题:
$query = $this->getEntityManager()
->createQueryBuilder();
$query->setFirstResult(($page - 1) * $maxperpage);
$query->setMaxResults($maxperpage);
$query->select('d')
->from('DemandeBundle:Declaration', 'd')
->orderBy('d.id', 'ASC')
->innerJoin('ContactBundle:Contact', 'c', 'WITH', 'd.contact = c')
->where('c.structure_id = :structure_id')
->setParameter('structure_id', $structureId)
->getQuery()
->getResult();
return new Paginator($query, true);
当我不使用innerJoin时,它工作正常,但我需要使用它,以便只显示有关我的用户的请求。
使用innerJoin我遇到了这样的错误:
"An exception has been thrown during the rendering of a template
("Cannot count query which selects two FROM components, cannot make distinction") in
DemandeBundle:Demande:listing_demande.html.twig at line 25"
如果不使用其他捆绑或其他任何东西,我怎样才能避免这个问题。
希望你能理解我的人。
答案 0 :(得分:5)
您的Declaration
与Contact
有何关联?
在[{1}} ManyToOne
中Contact
关系指向Declaration
会更好。这样,它将起作用,因为您不会拥有两个FROM组件,而是单个组件。
然后,修改查询以执行:
->innerJoin('d.contant', 'c')
完整查询应如下所示:
$query->select('d')
->from('DemandeBundle:Declaration', 'd')
->orderBy('d.id', 'ASC')
->innerJoin('d.contact', 'c') // <-- THIS LINE IS CRITICAL
->where('c.structure_id = :structure_id')
->setParameter('structure_id', $structureId)
->getQuery()
->getResult();
答案 1 :(得分:0)
最后,我找到了解决方案:
而不是:
$query->select('d')
->from('DemandeBundle:Declaration', 'd')
->orderBy('d.id', 'ASC')
->innerJoin('ContactBundle:Contact', 'c', 'WITH', 'd.contact = c')
->where('c.structure_id = :structure_id')
->setParameter('structure_id', $structureId)
->getQuery()
->getResult();
我用过:
$query->select('d')
->add('from', 'SgaDemandeBundle:Declaration d INNER JOIN d.contact c')
->where('c.structure_id = :structure_id')
->setParameter('structure_id', $structureId)
->orderBy('d.id', 'ASC')
->getQuery();