doctrine orm count 1:n关于加入的关系

时间:2012-04-15 13:39:42

标签: join symfony count doctrine query-builder

我正在使用来自symfony2的admingenerator模块的doctrine orm,我无法进行涉及两个表的选择计数。 我真的很感激对此的任何想法。非常感谢!

这是 querybuilder 表达式:

class ListController extends BaseListController
{
protected function getQuery()
    {
        $query = $this->getDoctrine()
                    ->getEntityManager()
                    ->createQueryBuilder()
                    ->select('q, count(f.fbid) AS no')
                    ->from('Shlomi\UsersBundle\Entity\users', 'q')
                    ->leftJoin('q.fbid' , 'f')
                    ->groupBy('q.fbid');


        $this->processSort($query);
        $this->processFilters($query);
                $this->processScopes($query);

        return $query->getQuery();
    }
}

我使用的两个实体是:

class Users
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var bigint $fbid
     *
     * @ORM\OneToMany(targetEntity="Friendships", mappedBy ="fbid")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="fbid", referencedColumnName="fbid")
     * })
     */
    private $fbid;
   ....

AND

class Friendships
{
    /**
     * @var integer $Id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $Id;

   /**
     * @var Users
     *
     * @ORM\ManyToOne(targetEntity="Users", inversedBy="fbid")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="fbid", referencedColumnName="fbid")
     * })
     */
    private $fbid;
....

虽然友谊中的关联注释已由doctrine:generate-entities(包含来自Users.fbid的fbid的外键引用)自动生成,但是根据我的知识手动插入了Users(1:n)中的注释。

我尝试过一遍又一遍地编辑查询构建器和注释,但最后我得到了这个:

  

在渲染模板期间抛出异常(“Catchable Fatal Error:类Doctrine \ ORM \ PersistentCollection的对象无法转换为C:\ xampp \ htdocs \ symfony2 \ app \ cache \ dev \中的字符串第92行的Admingenerated / ShlomiUsersBundle / Resources / views / UsersList / index.html.twig中的twig \ ea \ 85 \ 2b678090e942db52cc01e3950dbc.php第225行。

谢谢, 离子

1 个答案:

答案 0 :(得分:1)

尝试:

    $qb = $this->getDoctrine()
               ->getEntityManager()
               ->createQueryBuilder();
    $query = $qb->select('q', $qb->expr()->count('f.fbid'))
                ->from('Shlomi\UsersBundle\Entity\users', 'q')
                ->leftJoin('q.fbid' , 'f')
                ->groupBy('q.fbid');

这个制作querybuilder($ qb)然后形成查询的两步过程非常重要,因此您可以使用$ qb方法(例如expr()和count())