3

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

这是查询构建器表达式:

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

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

虽然 Friendships 中的关联注释是由学说自动生成的:generate-entities(包含来自 Users.fbid 的 fbid 的外键引用),但据我所知,Users(1:n) 中的注释是手动插入的。

我已经尝试一遍又一遍地编辑查询生成器和注释,但最后我得到了这个:

渲染模板期间抛出异常(“Catchable Fatal Error: Object of class Doctrine\ORM\PersistentCollection could not be convert to string in C:\xampp\htdocs\symfony2\app\cache\dev\twig\ea \85\2b678090e942db52cc01e3950dbc.php 第 225 行") 在第 92 行的 Admingenerated/ShlomiUsersBundle/Resources/views/UsersList/index.html.twig 中。

谢谢,离子

4

1 回答 1

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

于 2012-12-13T01:32:46.217 回答