C'est ma fonction où j'essaie de montrer l'historique de l'utilisateur. Pour cela, je dois afficher les crédits actuels de l'utilisateur ainsi que son historique de crédit.
C'est ce que j'essaie de faire:
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;
}
Cependant, j'obtiens cette erreur:
[Erreur de syntaxe] ligne 0, col 98: Erreur: Doctrine attendue\ORM\Query\Lexer :: T_WITH, activé '
Edit: J'ai remplacé 'ON' par 'WITH' dans la clause de jointure et ce que je vois maintenant ne représente qu'une valeur de la colonne jointe.
Si vous avez une association sur une propriété qui pointe vers l'utilisateur (disons Credit\Entity\UserCreditHistory#user
, choisi dans votre exemple), alors la syntaxe est assez simple:
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();
}
Puisque vous appliquez une condition au résultat joint ici, utilisez un LEFT JOIN
ou simplement JOIN
est identique.
Si aucune association n'est disponible, la requête se présente comme suit
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();
}
Cela produira un ensemble de résultats ressemblant à ce qui suit:
array(
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
array(
0 => UserCreditHistory instance,
1 => Userinstance,
),
// ...
)