From 4b8e3ed513e4e5dc37e58d3a6ffd672aaf630295 Mon Sep 17 00:00:00 2001 From: JFX Date: Fri, 5 May 2017 16:59:07 +0200 Subject: [PATCH] Safe prefix aliases for buildAssociationQuery() Consider the following $I->seeInRepository( 'OrderItem', array( 'order' => array( 'recipient_email'=> self::MEMBER_EMAIL ) ) ); Generates the following query: SELECT s FROM OrderItem s INNER JOIN s.order order WHERE order.recipient_email = :order__recipient_email Currently fails with expected literal. The suggested change would produce SELECT s FROM OrderItem s INNER JOIN s.order _order WHERE _order.recipient_email = :_order__recipient_email --- src/Codeception/Module/Doctrine2.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Codeception/Module/Doctrine2.php b/src/Codeception/Module/Doctrine2.php index f9a80373ec..77b57dbed0 100644 --- a/src/Codeception/Module/Doctrine2.php +++ b/src/Codeception/Module/Doctrine2.php @@ -411,14 +411,14 @@ protected function buildAssociationQuery($qb, $assoc, $alias, $params) if (isset($data->associationMappings)) { if ($map = array_key_exists($key, $data->associationMappings)) { if (is_array($val)) { - $qb->innerJoin("$alias.$key", $key); + $qb->innerJoin("$alias.$key", "_$key"); foreach ($val as $column => $v) { if (is_array($v)) { $this->buildAssociationQuery($qb, $map['targetEntity'], $column, $v); continue; } - $paramname = $key . '__' . $column; - $qb->andWhere("$key.$column = :$paramname"); + $paramname = "_$key" . '__' . $column; + $qb->andWhere("_$key.$column = :$paramname"); $qb->setParameter($paramname, $v); } continue;