2017-01-31 4 views
1

의 교리를 얻고 나는 주제의 메소드 getPostCount()를 추가하고 싶습니다. 다른 프레임 워크에서는 다음과 같은 것을 사용했습니다 :

public function getPostCount() 
    {   
      $count = Post::find() 
       ->where(['topic_id' => $this->id]) 
       ->count(); 

     return $count; 
    } 

그러나 symfony2에서 나는 그것을 만드는 법을 모릅니다.

답변

3

에 괜찮아요.

/** 
* @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; 
} 
+0

안녕하세요, 답변 주셔서 감사합니다. 솔루션을 사용하여 나뭇 가지에 postCount를 표시하려면 어떻게해야합니까? post.getPostCount (topic.id)와 비슷합니까? –

+0

하나의 카운트 만 필요하면 컨트롤러에서 나뭇 가지에 변수를 전달하십시오. 다른 손으로는 나뭇 가지 필터를 만들 수 있습니다.이 예제는 http://ourcodeworld.com/articles/read/161/how-to-execute-a-doctrine-query-using-twig-on-a-template입니다. -in-symfony-2-and- – panche14

+0

답변 해 주셔서 감사합니다. –

2
//Topic.php 

public function getPostsCount() 
{ 
    return $this->getPosts()->count(); 
} 

구성한 경우 주석 또는 yml 제대로, 당신은 당신이이 방법으로 repository class을 만들 수있는이

3

을 또한

//Topic.php 
public function getPostsCount() 
{ 
    return $this->getPosts()->count(); 
} 

이 사용 원칙에 대답 @DonCallisto하기 lazyloading : 이미 엔터티 간의 관계를 정의 했으므로 수행 할 수 있습니다.

엔티티 내부에서 쿼리를 수행하는 것이 좋지 않으므로 Repository을 사용해야합니다. 포스트 저장소에

+1

먼저, 명시 적으로 쿼리를 수행하지 않습니다.이 작업을 수행하는 doctrine이 완벽하게 정상입니다. 둘째 : 엔티티가로드 될 때마다 수화되어야 할 필드에 주석을 달 수 있습니다 (그러나이 경우에는 postsCount가 매번 필요하지 않을 수도 있습니다). 여기서 "나쁜 습관"은 성능 문제 일뿐입니다. – DonCallisto

+0

@DonCallisto 질의 부분은 저자의 예입니다. 그것의 메소드'getPostCount()'는 엔티티 안에 있습니다 (그는'$ this-> id'를 사용합니다). 나는 당신의 대답에 아무런 문제가 없다. – goto

+0

나는 단지 무언가를 설명했는데, 당신의 대답에 전혀 문제가 없다! :) 건배 – DonCallisto

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