0
카테고리별로 게시물을 가져와 표시되는 것을 제외하고 최대 제한을 설정하는 작동하는 queryBuilder가 있습니다.Symfony2 -이 querybuilder를 어떻게 단순화 할 수 있습니까?
질문 :이 queryBuilder를 어떻게 단순화 할 수 있습니까?
쿼리에서 나는 2 개의 테이블 (카테고리/OneToMany/ManyToOne 관계로 연결된 게시물)을 조인 할 필요가없고 컨트롤러에서 $ category를 설정하고있다. 리팩터링의 더 나은 방법이있다. 이?
queryBuilder
public function getRelatedPosts($exceptPost, $limit, $category)
{
return $this
->createQueryBuilder('post')
->leftJoin('post.category','category')
->where('post != :exceptPost')
->setParameter('exceptPost', $exceptPost)
->andWhere('category = :category')
->setParameter('category', $category)
->orderBy('post.createdAt', 'DESC')
->setMaxResults($limit)
->getQuery()
->execute();
}
컨트롤러 queryBuilder
public function getRelatedPosts($exceptPost, $limit, $category)
{
return $this
->createQueryBuilder('post')
->where('post != :exceptPost')
->andWhere('post.category = :category')
->setParameter('exceptPost', $exceptPost)
->setParameter('category', $category)
->orderBy('post.createdAt', 'DESC')
->setMaxResults($limit)
->getQuery()
->execute();
}
조인을 제거하고 * category *에 대한 쿼리의 where 절을'-> andWhere ('post.category = : category')'로 변경 한 다음 매개 변수를'-> setParameter ('category', $ category-> getId())'? 참조 된 컬럼 이름이 'id'라면 – Javad
위의 작업 쿼리를 업데이트했습니다. 그리고 조인을 제거, 내가 컨트롤러에서 카테고리를 설정하는 것을 없애 버릴 수있는 방법이 있습니까? 'category = $ post-> getCategory();'그리고 그것을 전달합니까? – Kincsem