동적으로 쿼리를 작성하려고합니다. 초기 상태는 괜찮습니다. 이것은 모든 쿼리에 존재해야하는 최초의 where 절입니다.진술이 추가되지 않는 곳
$qb->add('where', $qb->expr()->andx(
$qb->expr()->eq('s.competitor', $competitor),
$qb->expr()->eq('s.ignored', $ignored),
$qb->expr()->eq('s.id', $params['s_id']),
$qb->expr()->eq('s.id', 'k.targetSite')
), true);
하지만 건물에있는 앱에서 필터링을 허용합니다. 그런 일이 발생하면 쿼리 작성기에 where 절을 추가하려고합니다. 이 줄이 코드에서 나중에 실행되면 위의 where 문을 덮어 씁니다.
$qb->add('where', $qb->expr()->like($col, $val), true);
내가 읽고 무엇을, 3 매개 변수
$append
이전 문을 계속해야에서
,하지만 일이 아니에요. Doctrine 1.2에서는 다음과 같이 할 수 있습니다.
foreach($filter as $col => $val) {
$dql->addWhere($col = ?, array($val));
}
QueryBuilder에 Where 절을 동적으로 추가하려면 어떻게해야합니까? 여기에 업데이트
은 전체 문장
$where = array('col' => 'k.text', 'val' => 'some word%');
$qb = $this->entityManager->createQueryBuilder()
->select('s, sc')
->from('Dashboard\Entity\Section', 'sc')
->innerJoin('sc.keyword', 'k')
->innerJoin('sc.site', 's')
->leftJoin('k.keywordCategory', 'kc')
->leftJoin('k.keywordSubCategory', 'ksc');
$qb->add('where', $qb->expr()->andx(
$qb->expr()->eq('s.competitor', $competitor),
$qb->expr()->eq('s.ignored', $ignored),
$qb->expr()->eq('s.id', $params['s_id']),
$qb->expr()->eq('s.id', 'k.targetSite')
), true);
if ($where) {
$qb->add('where', $qb->expr()->andx(
$qb->expr()->like($where['col'], $where['val'])
), true);
}
$qb->addGroupBy('k.id');
$qb->addGroupBy('s.id');
$qb->setFirstResult($params['start'])
->setMaxResults($params['limit']);
$q = $qb->getQuery();
echo $q->getSql();
되고 출력은 다음 첫 번째
SELECT s0_.id AS id0, k1_.id AS id1, k1_.name AS name2, k2_.id AS id3, k2_.name AS name4, k3_.id AS id5, k3_.text AS text6, k3_.search_vol AS search_vol7, s4_.id AS id8, s4_.sub_domain AS sub_domain9, MIN(s0_.rank) AS sclr10, MAX(s0_.created) AS sclr11
FROM section s0_
INNER JOIN keyword k3_ ON s0_.k_id = k3_.id
INNER JOIN site s4_ ON s0_.s_id = s4_.id
LEFT JOIN keyword_category k1_ ON k3_.k_cat_id = k1_.id
LEFT JOIN keyword_sub_category k2_ ON k3_.k_subcat_id = k2_.id
WHERE k3_.text LIKE 'some word%'
GROUP BY k3_.id, s4_.id LIMIT 25 OFFSET 0
내가 그 if ($where)
절에 추가하지 않으면입니다 andx
진술이 아직 제자리에 있습니다. 그러나 동적으로 추가하려고하면 마지막 WHERE 문만 추가되고 나머지는 지워집니다. 나는 또한 이것을 덧붙여 야했다. 나는 이것 역시 시도했다.
if ($where) {
$qb->add('where', $qb->expr()->like($where['col'], $where['val']), true);
}
나는 성공적 쿼리 빌더 상태에 대해 내가 너무 유효해야 사용하려고 시도하고있는 방법을
$qb->andWhere($qb->expr()->like($where['col'], $where['val']));
그러나 API 문서를 사용할 수 있습니다. 내가 제대로하고 있는지, 버그인지 확인하고 싶었다.
생성 된 DQL 예제 필터를 사용하여 여기에 성명을 기재하십시오. – Cobby
나는 함께 일하는 전체 진술을 추가했다. – Nathan