Symfony 2在实体中获得Doctrine

时间:2017-01-31 15:30:23

标签: symfony doctrine-orm entity

我有两个班级

    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中,我不知道如何制作它。

4 个答案:

答案 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;
}