加入,我想使用Doctrine的查詢生成器來構造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的結構。提前致謝!
注意:我知道我們也可以用Doctrine編寫native 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();
}
}
能否請你提供整個以下錯誤消息的作品? – hacfi 2013-03-13 07:27:07
QueryException:[語法錯誤]第0行,第74列:錯誤:字符串的預期結束,'ON' – 2013-03-13 08:50:56