3 namespace Doctrine\Tests\ORM\Functional\Ticket;
5 use Doctrine\Tests\Models\ECommerce\ECommerceCart;
6 use Doctrine\Tests\Models\ECommerce\ECommerceCustomer;
7 use Doctrine\ORM\Query;
8 use Doctrine\ORM\Query\AST;
10 require_once __DIR__ . '/../../../TestInit.php';
12 class DDC736Test extends \Doctrine\Tests\OrmFunctionalTestCase
14 protected function setUp()
16 $this->useModelSet('ecommerce');
23 public function testReorderEntityFetchJoinForHydration()
25 $cust = new ECommerceCustomer;
26 $cust->setName('roman');
28 $cart = new ECommerceCart;
29 $cart->setPayment('cash');
30 $cart->setCustomer($cust);
32 $this->_em->persist($cust);
33 $this->_em->persist($cart);
37 $result = $this->_em->createQuery("select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c")
38 ->getSingleResult(/*\Doctrine\ORM\Query::HYDRATE_ARRAY*/);
43 $this->assertInstanceOf('Doctrine\Tests\Models\ECommerce\ECommerceCart', $cart2);
44 $this->assertNotInstanceOf('Doctrine\ORM\Proxy\Proxy', $cart2->getCustomer());
45 $this->assertInstanceOf('Doctrine\Tests\Models\ECommerce\ECommerceCustomer', $cart2->getCustomer());
46 $this->assertEquals(array('name' => 'roman', 'payment' => 'cash'), $result);
54 public function testDqlTreeWalkerReordering()
56 $cust = new ECommerceCustomer;
57 $cust->setName('roman');
59 $cart = new ECommerceCart;
60 $cart->setPayment('cash');
61 $cart->setCustomer($cust);
63 $this->_em->persist($cust);
64 $this->_em->persist($cart);
68 $dql = "select c, c.name, ca, ca.payment from Doctrine\Tests\Models\ECommerce\ECommerceCart ca join ca.customer c";
69 $result = $this->_em->createQuery($dql)
70 ->setHint(Query::HINT_CUSTOM_TREE_WALKERS, array('Doctrine\Tests\ORM\Functional\Ticket\DisableFetchJoinTreeWalker'))
73 /* @var $cart2 Doctrine\Tests\Models\ECommerce\ECommerceCart */
74 $cart2 = $result[0][0];
75 $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $cart2->getCustomer());
79 class DisableFetchJoinTreeWalker extends \Doctrine\ORM\Query\TreeWalkerAdapter
81 public function walkSelectStatement(AST\SelectStatement $AST)
83 $this->walkSelectClause($AST->selectClause);
87 * @param \Doctrine\ORM\Query\AST\SelectClause $selectClause
89 public function walkSelectClause($selectClause)
91 foreach ($selectClause->selectExpressions AS $key => $selectExpr) {
92 /* @var $selectExpr \Doctrine\ORM\Query\AST\SelectExpression */
93 if ($selectExpr->expression == "c") {
94 unset($selectClause->selectExpressions[$key]);