Join 连接上的orm计数1:n关系

Join 连接上的orm计数1:n关系,join,symfony,count,doctrine,query-builder,Join,Symfony,Count,Doctrine,Query Builder,我使用的是symfony2的admingenerator模块,无法对两个表进行选择计数。 如果您能想到这一点,我将不胜感激。提前多谢 这是querybuilder的表达式: class ListController extends BaseListController { protected function getQuery() { $query = $this->getDoctrine() ->getEntityMa

我使用的是symfony2的admingenerator模块,无法对两个表进行选择计数。 如果您能想到这一点,我将不胜感激。提前多谢

这是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;
   ....

鉴于Friendships中的关联注释是由doctrine:generate entities(包含来自Users.fbid的fbid外键引用)自动生成的,据我所知,Users(1:n)中的注释是手动插入的

我尝试了一次又一次地编辑查询生成器和注释,但最终得到以下结果:

在呈现模板的过程中引发了异常(“可捕获的致命错误:无法在C:\xampp\htdocs\symfony2\app\cache\dev\twig\ea\85\2b678090e942db52cc01e3950dbc.php第225行中将类的对象\ORM\PersistentCollection转换为字符串”)在第92行的Admingenerated/ShlomiUsersBundle/Resources/views/UsersList/index.html.twig中

谢谢, 离子

试试:

    $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())

我似乎完全误解了注释。这个页面包含了建立关系的完整信息,然而,要理解它需要相当多的大脑:随着ORM的工作,不需要计算sql语句中的记录,只需要计算ArrayCollection属性的对象$query=$this->getDoctrine()->getEntityManager()->createQueryBuilder()->select('q,f')->from('Shlomi\UsersBundle\Entity\users','q')->leftJoin('q.friends','f');你能用
admingenerated/ShlomiUsersBundle/Resources/views/UsersList/index.html.twig
中的代码更新这个问题吗?至少在第92行编写代码。正如@Kosta所说,您应该在问题中提供该模板文件。除此之外,您在控制器中使用的是什么类型的水合作用。阵列?
    $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');