如何使用doctrine 2查询生成器选择字段

时间:2013-09-24 00:13:24

标签: php mysql symfony orm doctrine-orm

我在Symfony2 Repository中执行以下查询。查询看起来像

                 $q = $this
                    ->createQueryBuilder('m')
                    ->select(array('m.reciever','m.created','m.id','m.subject'))
                    ->where('m.reciever = ?1')
                    ->orderBy('m.id','DESC')
                    ->setMaxResults( '?2' )
                    ->setFirstResult( '?3' )
                    ->setParameter(1,$id)
                    ->setParameter(2,$itemsPerPage)
                    ->setParameter(3,$offset)
                    ->getQuery();

其中reciever,created,id和subject是我的消息实体的字段。我不需要指定我选择的实体。我一直得到的错误是......

[Semantical Error] line 0, col 12 near 'reciever, m.created,': Error: Invalid PathExpression. Must be a StateFieldPathExpression. 

我不确定状态字段路径表达式是什么或语法可能是什么。似乎一切都应该是正确的。

3 个答案:

答案 0 :(得分:6)

使用select()方法时,会覆盖$this->createQueryBuilder('m')中的默认方法。这就是你失去m别名的原因。要避免这种情况,请使用addSelect()或在alias方法中指定from()

->from('Bundle:Entity', 'ALIAS')

答案 1 :(得分:4)

你有这样的事情:=?

 $q = $this
                ->createQueryBuilder()
                ->select('m.reciever, m.created ,m.id , m.subject')
                ->from('/Acme/Entity/DemoEntity', 'm')
                ->where('m.reciever = ?1')
                ->orderBy('m.id','DESC')
                ->setMaxResults( '?2' )
                ->setFirstResult( '?3' )
                ->setParameter(1,$id)
                ->setParameter(2,$itemsPerPage)
                ->setParameter(3,$offset)
                ->getQuery();

我不确定,但我认为只有在多个表连接在一起时才使用数组语法: array('m.reciever,m.created','p.user,p.id')< / em>的

答案 2 :(得分:1)

我希望这会对你有所帮助..

    $em = $this->getDoctrine()->getManager();
    $q = $em->createQueryBuilder()
            ->select('m.reciever,m.created,m.id,m.subject')
            ->from('bundle:entity','m')
            ->where('m.reciever = ?1')
            ->orderBy('m.id','DESC')
            ->setMaxResults( '?2' )
            ->setFirstResult( '?3' )
            ->setParameter(1,$id)
            ->setParameter(2,$itemsPerPage)
            ->setParameter(3,$offset)
            ->getQuery();