这是我的函数,其中我试图向用户展示的历史。 为此,我需要与他的信用记录一起显示用户的当前信贷。
这就是我要做的:
public function getHistory($users) {
$qb = $this->entityManager->createQueryBuilder();
$qb->select(array('a','u'))
->from('Credit\Entity\UserCreditHistory', 'a')
->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')
->where("a.user = $users ")
->orderBy('a.created_at', 'DESC');
$query = $qb->getQuery();
$results = $query->getResult();
return $results;
}
不过,我得到这个错误:
[语法错误] 0行,列98:错误:预期学说\ ORM \查询\词法:: T_WITH,得到了 'ON'
编辑 :我的加入条款中更换“ON”与“用”而现在我看到的是从联接的列只有1个值。
如果你有指向用户的属性关联(比方说Credit\Entity\UserCreditHistory#user
,从你的例子挑),那么语法很简单:
public function getHistory($users) {
$qb = $this->entityManager->createQueryBuilder();
$qb
->select('a', 'u')
->from('Credit\Entity\UserCreditHistory', 'a')
->leftJoin('a.user', 'u')
->where('u = :user')
->setParameter('user', $users)
->orderBy('a.created_at', 'DESC');
return $qb->getQuery()->getResult();
}
既然你在这里连接结果应用条件,使用LEFT JOIN
或干脆JOIN
是一样的。
如果没有关联可用,则该查询看起来像以下
public function getHistory($users) {
$qb = $this->entityManager->createQueryBuilder();
$qb
->select('a', 'u')
->from('Credit\Entity\UserCreditHistory', 'a')
->leftJoin(
'User\Entity\User',
'u',
\Doctrine\ORM\Query\Expr\Join::WITH,
'a.user = u.id'
)
->where('u = :user')
->setParameter('user', $users)
->orderBy('a.created_at', 'DESC');
return $qb->getQuery()->getResult();
}
这将产生一个结果,看起来像以下:
array(
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
// ...
)