如何做左派join主义?

这是我正在尝试显示用户历史logging的function。 为此,我需要显示用户的当前信用以及他的信用logging。

这是我想要做的:

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 \查询\ Lexer :: T_WITH,得到'开'

编辑 :我用连接条款中的“WITH”replace了“ON”,现在我所看到的只是来自连接列的1个值。

如果你有一个指向用户的属性(比如Credit\Entity\UserCreditHistory#user ,从你的例子中select),那么这个语法非常简单:

 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, ), // ... )