[SQL] 내부 사용 빌더 교리 쿼리 조건 가입
SQL내부 사용 빌더 교리 쿼리 조건 가입
나는 교리의 쿼리 빌더를 사용하여 다음의 SQL을 구성하고 싶습니다 :
select c.*
from customer c
join phone p
on p.customer_id = c.id
and p.phone = :phone
where c.username = :username
우선 시도
$qb->select('c')
->innerJoin('c.phones', 'p', Join::ON, $qb->expr()->andx(
$qb->expr()->eq('p.customerId', 'c.id'),
$qb->expr()->eq('p.phone', ':phone')
))
->where('c.username = :username');
그러나 나는 다음과 같은 오류를 받고 있어요
Error: expected end of string, got 'ON'
그럼 난 시도
$qb->select('c')
->innerJoin('c.phones', 'p')
->where('c.username = :username')
->andWhere('p.phone = :phone');
이는 작동하는 것 같군. 그러나 사람이 첫 번째 시도 뭐가 잘못 알고 있나요? 나는 그것이 SQL은 어떻게 구성되어 있는지에 더 가깝게 유사 이래 처음 일을하고 싶습니다. 사전에 감사합니다!
참고 : 우리는 또한 교리와 기본 MySQL의 또는 DQL을 쓸 수 있습니다 알고,하지만 난 쿼리 빌더를 원합니다.
편집 : 아래의 전체 코드가
namespace Cyan\CustomerBundle\Repository;
use Cyan\CustomerBundle\Entity\Customer;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\Expr\Join;
class CustomerRepository extends EntityRepository
{
public function findCustomerByPhone($username, $phone)
{
$qb = $this->createQueryBuilder('c');
$qb->select('c')
->innerJoin('c.phones', 'p', Join::ON, $qb->expr()->andx(
$qb->expr()->eq('p.customerId', 'c.id'),
$qb->expr()->eq('p.phone', ':phone')
))
->where('c.username = :username');
// $qb->select('c')
// ->innerJoin('c.phones', 'p')
// ->where('c.username = :username')
// ->andWhere('p.phone = :phone');
$qb->setParameters(array(
'username' => $username,
'phone' => $phone->getPhone(),
));
$query = $qb->getQuery();
return $query->getResult();
}
}
해결법
-
==============================
1.나는 내 자신의 질문에 대답하는거야.
나는 내 자신의 질문에 대답하는거야.
따라서, 다음은 나를 위해 작동
$qb->select('c') ->innerJoin('c.phones', 'p', 'WITH', 'p.phone = :phone') ->where('c.username = :username');
또는
$qb->select('c') ->innerJoin('c.phones', 'p', Join::WITH, $qb->expr()->eq('p.phone', ':phone')) ->where('c.username = :username');
-
==============================
2.명시 적으로이 같은 가입 할 수 있습니다 :
명시 적으로이 같은 가입 할 수 있습니다 :
$qb->innerJoin('c.phones', 'p', Join::ON, 'c.id = p.customerId');
하지만 당신은 교리에서 가입 클래스의 네임 스페이스를 사용합니다 :
use Doctrine\ORM\Query\Expr\Join;
또는 그렇게 선호하는 경우 :
$qb->innerJoin('c.phones', 'p', Doctrine\ORM\Query\Expr\Join::ON, 'c.id = p.customerId');
그렇지 않으면, 클래스가 발견되지 않고 스크립트가 충돌합니다 가입 ...
innerJoin 방법의 다음 생성자 :
public function innerJoin($join, $alias, $conditionType = null, $condition = null);
현재 위치 (... 등, 그냥 "와 함께"또한 "ON"을 가입하지만) 다른 가능성을 찾을 수 있습니다 http://docs.doctrine-project.org/en/2.0.x/reference/query-builder를. HTML # 더 - EXPR 수준
편집하다
그것이해야한다고 생각 :
$qb->select('c') ->innerJoin('c.phones', 'p', Join::ON, 'c.id = p.customerId') ->where('c.username = :username') ->andWhere('p.phone = :phone'); $qb->setParameters(array( 'username' => $username, 'phone' => $phone->getPhone(), ));
그렇지 않으면 당신이 ON과 함께, 아마도 문제의 혼합을 수행 생각합니다.
from https://stackoverflow.com/questions/15377079/doctrine-query-builder-using-inner-join-with-conditions by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버에서 외부 키를 사용하는 히트 심각한 성능이 있습니까? (0) | 2020.06.08 |
---|---|
[SQL] 하단에 널 (null)와 ORDER BY의 ASC (0) | 2020.06.08 |
[SQL] T-SQL 조건부 주문 (0) | 2020.06.08 |
[SQL] SQL 제약 MINVALUE / MAXVALUE? (0) | 2020.06.08 |
[SQL] SQL에서 날짜 시간 필드의 시간 부분 (0) | 2020.06.08 |