많은 카테고리가 포함 된 블로그 포스트를 게시 할 수있는 블로그 웹 사이트를 구축하십시오. 각 블로그별로 권장 블로그 포스트를 표시하고 싶습니다. 권장 블로그 포스트는보고있는 블로그 포스트와 동일한 카테고리를 기반으로해야합니다.Symfony 3 createQueryBuilder와 작동하는 복잡한 쿼리를 얻을 수 없습니다. 권장 블로그 포스트가 표시되어야합니다.
SQL에서 처음으로 쿼리를 작성했지만 작동하지만 createQueryBuilder를 사용하여 프로젝트를 구현하려고하면 같은 카테고리가 포함 된 블로그 포스트가 아닌 사이트의 모든 블로그 포스트가 생성됩니다.
은 여기 내 SQL 쿼리입니다 :이 쿼리가 잘 작동하지만 난 내 심포니 프로젝트에서 사용하기 위해 노력하고있어 때 작동하지 않습니다 말했듯이
SELECT
*
FROM
blog b
INNER JOIN
blog_category bc ON b.id = bc.blog_id
INNER JOIN
category c ON bc.category_id = c.id
WHERE
c.id IN (SELECT
c.id
FROM
blog b
INNER JOIN
blog_category bc ON b.id = bc.blog_id
INNER JOIN
category c ON bc.category_id = c.id
WHERE
b.id = 33) and b.id != 33 group by b.id
.
public function findRelatedBlogs($blog_Id)
{
$qbCat = $this->_em->createQueryBuilder();
$qbCat->select('ca.id')
->from('AppBundle:Blog', 'bl')
->join('bl.categories', 'ca')
->where('b.id =:blogid')
->setParameter('blogid', $blog_Id);
$qb = $this->_em->createQueryBuilder();
$qb->select('b')
->from('AppBundle:Blog', 'b')
->join('b.categories', 'c')
->where($qb->expr()->in('c.id', $qbCat->getDQL()))
->where('b.id !=:blogid')
->groupBy('b.id')
->setParameter('blogid', $blog_Id);
return $qb->getQuery()->getResult();
}
내가 잘못 된 것 같습니다.
에 대한
감사합니다() 대신 getResult() & querybuilder가 만드는 SQL 조건을 볼 수 있습니다. 배후에서 실제로하고있는 일과 기대하는 바를 산출하지 못하는 부분을 디버깅하는 데 매우 유용합니다. – Richard
Doctrine에서 subselect를 사용할 때 항상 다음과 같이 만듭니다. 'in' 'c.id', '('. $ qbCat-> getDQL(). ')')'. 그런 다음 subselect는 적절한 구문에 SQL이 요구하는'('과') 사이에 있습니다. –
@Richard가 언급했듯이, 당신은'getSQL()'을 사용하고 Symfony 디버그 도구 모음을 확인할 수 있습니다 ... –