我有两个班级
class Topic
{
protected $id;
//....
}
和
class Post
{
protected $topic_id;
//...
}
我想在Topic类中添加方法getPostCount()。在其他框架中,我曾经使用类似的东西:
public function getPostCount()
{
$count = Post::find()
->where(['topic_id' => $this->id])
->count();
return $count;
}
但是在symfony2中,我不知道如何制作它。
答案 0 :(得分:3)
您可以使用此方法创建repository class。将存储库类名添加到实体的映射定义中,如下所示:
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
*/
class Post
{
protected $topic_id;
//...
}
在您的存储库类中:
public function getPostCount($id)
{
$query = $this->createQueryBuilder('p')
->select('count(p.topic_id)')
->where('p.topic_id = :id')
->setParameter('id', $id)
->getQuery()->getSingleScalarResult();
return $query;
}
答案 1 :(得分:3)
除了@DonCallisto回答
//Topic.php
public function getPostsCount()
{
return $this->getPosts()->count();
}
这使用doctrine lazyloading:它可以完成,因为你已经定义了实体之间的关系。
在实体内部进行查询不是一个好习惯,你应该使用Repository
。
答案 2 :(得分:2)
//Topic.php
public function getPostsCount()
{
return $this->getPosts()->count();
}
如果您已正确配置注释或yml
,则可以使用此
答案 3 :(得分:2)
进入帖子库:
public function getPostCount($id) {
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('count(p.topic_id)');
$qb->from('AppBundle:Post', 't')
->where('p.topic_id = :id')
->setParameter('id', $id);
$count = $qb->getQuery()->getSingleScalarResult();
return $count;
}