我正在使用来自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行。
谢谢, 离子
答案 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())