2017-01-02 5 views
0

나는 두 개의 엔티티 인 사용자 & 게시를 보유하고 있습니다. 이 엔티티는 onetomany 및 manytoone 관계로 연결됩니다. 연결이 잘 작동합니다. 나는 모든 사용자에게 게시글을 가져다주고 내림차순으로 게시 번호별로 주문하는 쿼리를 만들려고 노력해 왔습니다.symfony의 게시물 수에 따라 모든 사용자 및 순서 가져 오기

사용자 엔티티 :

/** 
    * @ORM\OneToMany(targetEntity="Post", mappedBy="user") 
    */ 
    private $post; 

포스트 엔티티 :

/** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="post") 
    * @ORM\JoinColumn(name="user", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $user; 

아무 문제가 없다, 기본적으로, 난 그냥 심포니에서 쿼리를 만드는 방법을 알아낼 수 없습니다.

그래서, 여기에

$query = $this->createQueryBuilder('u') 
      ->leftJoin('u.post', 'p') 
      ->getQuery(); 

     return $query->getResult(); 
+0

검색어를 표시하고 문제를 알려주십시오. – dbrumann

+0

안녕하세요 @ dbrumann, 문제는 교리 쿼리를 만드는 방법을 확실히 모르겠다 – shaNnex

답변

0

확인 모든 사용자를 반환하는 기본 쿼리는, 그래서 자신을 제압 관리 할 것 같다. 다음은 쿼리입니다.

$query = $this->createQueryBuilder('u') 
      ->select('u') 
      ->leftJoin('u.post', 'p') 
      ->addSelect('COUNT(p) AS total') 
      ->groupBy('u.id') 
      ->orderBy('total', 'DESC') 
      ->getQuery(); 

     return $query->getResult(); 
1

죄송합니다. 답변을 드릴 수 없으므로 기쁘게 생각합니다. 그러나 미래와 확장 성을 고려하십시오. 매번 게시물을 세는 것은 좋지 않으며, 한 번은 잔인하게 정직해야합니다. 지금 대부분의 포럼 소프트웨어가하는 일을 고려해보십시오. 게시물이 대신 필드를 증가 시키면 (post_count 또는 무엇이라고 부르세요).

삭제 후 삭제하거나 '재검 표'옵션을 제공 할 수 있습니다. 관리자가 재개를 강제 할 수 있지만 마지막 수단이되어야합니다.

+0

고마워, 내가 분명히 염두에두고 있습니다. + – shaNnex

+2

당신은 바로 그 PHP에서 그들을 계산하는 모든 항목을 가져 오는 것은 좋은 생각이 아닙니다. 그것을위한 추가적인 칼럼을 가졌음에도 불구하고 또 다른 나쁜 생각처럼 보입니다. 이 필드는 동기화되지 않고 어쨌든 쓸모없는 오버 헤드입니다. MySQL은 추가 "도우미"필드가 없어도 데이터에 대해 빠른 COUNT 쿼리를 수행 할 수 있습니다. Doctrine ORM으로 계산하여 주문하거나 직접 쿼리를 작성하는 사용자 정의 저장소를 만드는 방법을 찾아야합니다. – dbrumann