3 namespace Doctrine\Tests\ORM\Functional\Ticket;
5 require_once __DIR__ . '/../../../TestInit.php';
10 class DDC1430Test extends \Doctrine\Tests\OrmFunctionalTestCase
13 protected function setUp()
18 $this->_schemaTool->createSchema(array(
19 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1430Order'),
20 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1430OrderProduct'),
22 $this->loadFixtures();
23 } catch (\Exception $exc) {
28 public function testOrderByFields()
30 $repository = $this->_em->getRepository(__NAMESPACE__ . '\DDC1430Order');
31 $builder = $repository->createQueryBuilder('o');
32 $query = $builder->select('o.id, o.date, COUNT(p.id) AS p_count')
33 ->leftJoin('o.products', 'p')
34 ->groupBy('o.id, o.date')
38 $this->assertEquals('SELECT o.id, o.date, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date ORDER BY o.id ASC', $query->getDQL());
39 $this->assertEquals('SELECT d0_.order_id AS order_id0, d0_.created_at AS created_at1, COUNT(d1_.id) AS sclr2 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at ORDER BY d0_.order_id ASC', $query->getSQL());
42 $result = $query->getResult();
44 $this->assertEquals(2, sizeof($result));
46 $this->assertArrayHasKey('id', $result[0]);
47 $this->assertArrayHasKey('id', $result[1]);
49 $this->assertArrayHasKey('p_count', $result[0]);
50 $this->assertArrayHasKey('p_count', $result[1]);
52 $this->assertEquals(1, $result[0]['id']);
53 $this->assertEquals(2, $result[1]['id']);
55 $this->assertEquals(2, $result[0]['p_count']);
56 $this->assertEquals(3, $result[1]['p_count']);
59 public function testOrderByAllObjectFields()
61 $repository = $this->_em->getRepository(__NAMESPACE__ . '\DDC1430Order');
62 $builder = $repository->createQueryBuilder('o');
63 $query = $builder->select('o, COUNT(p.id) AS p_count')
64 ->leftJoin('o.products', 'p')
65 ->groupBy('o.id, o.date, o.status')
70 $this->assertEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o.id, o.date, o.status ORDER BY o.id ASC', $query->getDQL());
71 $this->assertEquals('SELECT d0_.order_id AS order_id0, d0_.created_at AS created_at1, d0_.order_status AS order_status2, COUNT(d1_.id) AS sclr3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL());
73 $result = $query->getResult();
76 $this->assertEquals(2, sizeof($result));
78 $this->assertTrue($result[0][0] instanceof DDC1430Order);
79 $this->assertTrue($result[1][0] instanceof DDC1430Order);
81 $this->assertEquals($result[0][0]->getId(), 1);
82 $this->assertEquals($result[1][0]->getId(), 2);
84 $this->assertEquals($result[0]['p_count'], 2);
85 $this->assertEquals($result[1]['p_count'], 3);
88 public function testTicket()
90 $repository = $this->_em->getRepository(__NAMESPACE__ . '\DDC1430Order');
91 $builder = $repository->createQueryBuilder('o');
92 $query = $builder->select('o, COUNT(p.id) AS p_count')
93 ->leftJoin('o.products', 'p')
99 $this->assertEquals('SELECT o, COUNT(p.id) AS p_count FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1430Order o LEFT JOIN o.products p GROUP BY o ORDER BY o.id ASC', $query->getDQL());
100 $this->assertEquals('SELECT d0_.order_id AS order_id0, d0_.created_at AS created_at1, d0_.order_status AS order_status2, COUNT(d1_.id) AS sclr3 FROM DDC1430Order d0_ LEFT JOIN DDC1430OrderProduct d1_ ON d0_.order_id = d1_.order_id GROUP BY d0_.order_id, d0_.created_at, d0_.order_status ORDER BY d0_.order_id ASC', $query->getSQL());
103 $result = $query->getResult();
105 $this->assertEquals(2, sizeof($result));
107 $this->assertTrue($result[0][0] instanceof DDC1430Order);
108 $this->assertTrue($result[1][0] instanceof DDC1430Order);
110 $this->assertEquals($result[0][0]->getId(), 1);
111 $this->assertEquals($result[1][0]->getId(), 2);
113 $this->assertEquals($result[0]['p_count'], 2);
114 $this->assertEquals($result[1]['p_count'], 3);
117 public function loadFixtures()
119 $o1 = new DDC1430Order('NEW');
120 $o2 = new DDC1430Order('OK');
122 $o1->addProduct(new DDC1430OrderProduct(1.1));
123 $o1->addProduct(new DDC1430OrderProduct(1.2));
125 $o2->addProduct(new DDC1430OrderProduct(2.1));
126 $o2->addProduct(new DDC1430OrderProduct(2.2));
127 $o2->addProduct(new DDC1430OrderProduct(2.3));
129 $this->_em->persist($o1);
130 $this->_em->persist($o2);
145 * @Column(name="order_id", type="integer")
151 * @Column(name="created_at", type="datetime")
156 * @Column(name="order_status", type="string")
161 * @OneToMany(targetEntity="DDC1430OrderProduct", mappedBy="order", cascade={"persist", "remove"})
163 * @var \Doctrine\Common\Collections\ArrayCollection $products
170 public function getId()
175 public function __construct($status)
177 $this->status = $status;
178 $this->date = new \DateTime();
179 $this->products = new \Doctrine\Common\Collections\ArrayCollection();
184 public function getDate()
192 public function getStatus()
194 return $this->status;
198 * @param string $status
200 public function setStatus($status)
202 $this->status = $status;
206 * @return \Doctrine\Common\Collections\ArrayCollection
208 public function getProducts()
210 return $this->products;
214 * @param DDC1430OrderProduct $product
216 public function addProduct(DDC1430OrderProduct $product)
218 $product->setOrder($this);
219 $this->products->add($product);
226 class DDC1430OrderProduct
231 * @Column(type="integer")
237 * @var DDC1430Order $order
239 * @ManyToOne(targetEntity="DDC1430Order", inversedBy="products")
240 * @JoinColumn(name="order_id", referencedColumnName="order_id", nullable = false)
245 * @column(type="float")
250 * @param float $value
252 public function __construct($value)
254 $this->value = $value;
260 public function getId()
266 * @return DDC1430Order
268 public function getOrder()
274 * @param DDC1430Order $order
276 public function setOrder(DDC1430Order $order)
278 $this->order = $order;
284 public function getValue()
290 * @param float $value
292 public function setValue($value)
294 $this->value = $value;