如何使用doctrine 2和zf2连接两个实体?

时间:2015-06-27 18:03:46

标签: php doctrine-orm pagination zend-framework2 zend-paginator

我有两个实体,CarrosMsg,我希望CarrosMsg条消息

$query = $entityManager->createQuery("
    SELECT u 
    FROM Auto\Entity\Carros u
    JOIN Auto\Entity\Msg m WITH m.idautoad=u.idcarros
    WHERE u.identidade='".$emailidentidade."'
    ORDER BY u.datadoanuncio DESC
    ");

我正在使用分页器:

    // Create the paginator itself
$paginator = new Paginator(
        new DoctrinePaginator(new ORMPaginator($query))
);

我得到以下错误我有zend 2.3.9和doctrine 2.4

  

Arquivo:   C:\网站\汽车\厂商\ zendframework \ zendframework \库\ Zend的\分页程序\ Paginator.php:637

     

Mensagem:生成迭代器时出错

     

C:\网站\汽车\厂商\教义\ ORM \ lib中\学说\ ORM \工具\分页\ WhereInWalker.php:85

     

Mensagem:

     

无法统计选择两个FROM组件的查询,无法区分

当我尝试这样做时会产生错误:

foreach ($paginator as $carro)
{}

获得如下结果时错误消失:

$fi = $query->getResult();

然后

  $paginator = new \Zend\Paginator\Paginator(new
                \Zend\Paginator\Adapter\ArrayAdapter($fi)
          );

2 个答案:

答案 0 :(得分:0)

如果您有ManyToOne关系,您可以这样做(请务必先查看此链接,以使您的地图正确无误:Bidirectionnal ManyToOne relation

 public function getInvoices($idProformaGroup, $paginate = false)
    {
        $query = $this->getEntityManager()->createQueryBuilder();
        $query->select('po', 'i')
            ->from('Invoice\Entity\Proforma', 'po')
            ->innerJoin('po.idInvoice', 'i')
            ->andWhere("po.idProformaGroup = :idProformaGroup")
            ->orderBy('po.idProforma', 'ASC')
            ->setParameter('idProformaGroup', $idProformaGroup);
        if ($paginate) {
            $doctrineAdapter = new DoctrineAdapter(new ORMPaginator($query, true));
            return new Paginator($doctrineAdapter);
        } else {
            return $query->getQuery()->getResult();
        }
    }

如您所见,我的联接使用外键po.idInvoice来连接两个表。因此,我的Paginator没有告诉我你的错误。

编辑:有了参数,我可以决定是否分页。如果您不需要,请不要使用它。

编辑2:从链接到另一个问题加入Doctrine : Pagination with left Joins之前未来的答案与我试图向您解释的一致。

答案 1 :(得分:-1)

我不再使用了 新的DoctrinePaginator(新的ORMPaginator($ query))

现在我正在使用\ Zend \ Paginator \ Paginator及其工作 $ fi = $ query-> getResult();

$ paginator = new \ Zend \ Paginator \ Paginator(new                 \ Zend的\分页程序\适配器\ ArrayAdapter($ FI)           );