3 namespace Doctrine\Tests\ORM\Functional\Ticket;
7 require_once __DIR__ . '/../../../TestInit.php';
12 class DDC1335Test extends \Doctrine\Tests\OrmFunctionalTestCase
14 protected function setUp()
18 $this->_schemaTool->createSchema(array(
19 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1335User'),
20 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC1335Phone'),
23 } catch(\Exception $e) {
28 public function testDql()
30 $dql = 'SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.id';
31 $query = $this->_em->createQuery($dql);
32 $result = $query->getResult();
34 $this->assertEquals(sizeof($result), 3);
35 $this->assertArrayHasKey(1, $result);
36 $this->assertArrayHasKey(2, $result);
37 $this->assertArrayHasKey(3, $result);
39 $dql = 'SELECT u, p FROM '.__NAMESPACE__ . '\DDC1335User u INDEX BY u.email INNER JOIN u.phones p INDEX BY p.id';
40 $query = $this->_em->createQuery($dql);
41 $result = $query->getResult();
43 $this->assertEquals(sizeof($result), 3);
44 $this->assertArrayHasKey('foo@foo.com', $result);
45 $this->assertArrayHasKey('bar@bar.com', $result);
46 $this->assertArrayHasKey('foobar@foobar.com', $result);
48 $this->assertEquals(sizeof($result['foo@foo.com']->phones), 3);
49 $this->assertEquals(sizeof($result['bar@bar.com']->phones), 3);
50 $this->assertEquals(sizeof($result['foobar@foobar.com']->phones), 3);
52 $foo = $result['foo@foo.com']->phones->toArray();
53 $bar = $result['bar@bar.com']->phones->toArray();
54 $foobar = $result['foobar@foobar.com']->phones->toArray();
56 $this->assertArrayHasKey(1, $foo);
57 $this->assertArrayHasKey(2, $foo);
58 $this->assertArrayHasKey(3, $foo);
60 $this->assertArrayHasKey(4, $bar);
61 $this->assertArrayHasKey(5, $bar);
62 $this->assertArrayHasKey(6, $bar);
64 $this->assertArrayHasKey(7, $foobar);
65 $this->assertArrayHasKey(8, $foobar);
66 $this->assertArrayHasKey(9, $foobar);
69 public function testTicket()
71 $builder = $this->_em->createQueryBuilder();
72 $builder->select('u')->from(__NAMESPACE__ . '\DDC1335User', 'u', 'u.id');
74 $dql = $builder->getQuery()->getDQL();
75 $result = $builder->getQuery()->getResult();
77 $this->assertEquals(sizeof($result), 3);
78 $this->assertArrayHasKey(1, $result);
79 $this->assertArrayHasKey(2, $result);
80 $this->assertArrayHasKey(3, $result);
81 $this->assertEquals('SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.id', $dql);
84 public function testIndexByUnique()
86 $builder = $this->_em->createQueryBuilder();
87 $builder->select('u')->from(__NAMESPACE__ . '\DDC1335User', 'u', 'u.email');
89 $dql = $builder->getQuery()->getDQL();
90 $result = $builder->getQuery()->getResult();
92 $this->assertEquals(sizeof($result), 3);
93 $this->assertArrayHasKey('foo@foo.com', $result);
94 $this->assertArrayHasKey('bar@bar.com', $result);
95 $this->assertArrayHasKey('foobar@foobar.com', $result);
96 $this->assertEquals('SELECT u FROM ' . __NAMESPACE__ . '\DDC1335User u INDEX BY u.email', $dql);
99 public function testIndexWithJoin()
101 $builder = $this->_em->createQueryBuilder();
102 $builder->select('u','p')
103 ->from(__NAMESPACE__ . '\DDC1335User', 'u', 'u.email')
104 ->join('u.phones', 'p', null, null, 'p.id');
106 $dql = $builder->getQuery()->getDQL();
107 $result = $builder->getQuery()->getResult();
109 $this->assertEquals(sizeof($result), 3);
110 $this->assertArrayHasKey('foo@foo.com', $result);
111 $this->assertArrayHasKey('bar@bar.com', $result);
112 $this->assertArrayHasKey('foobar@foobar.com', $result);
114 $this->assertEquals(sizeof($result['foo@foo.com']->phones), 3);
115 $this->assertEquals(sizeof($result['bar@bar.com']->phones), 3);
116 $this->assertEquals(sizeof($result['foobar@foobar.com']->phones), 3);
118 $this->assertArrayHasKey(1, $result['foo@foo.com']->phones->toArray());
119 $this->assertArrayHasKey(2, $result['foo@foo.com']->phones->toArray());
120 $this->assertArrayHasKey(3, $result['foo@foo.com']->phones->toArray());
122 $this->assertArrayHasKey(4, $result['bar@bar.com']->phones->toArray());
123 $this->assertArrayHasKey(5, $result['bar@bar.com']->phones->toArray());
124 $this->assertArrayHasKey(6, $result['bar@bar.com']->phones->toArray());
126 $this->assertArrayHasKey(7, $result['foobar@foobar.com']->phones->toArray());
127 $this->assertArrayHasKey(8, $result['foobar@foobar.com']->phones->toArray());
128 $this->assertArrayHasKey(9, $result['foobar@foobar.com']->phones->toArray());
130 $this->assertEquals('SELECT u, p FROM '.__NAMESPACE__ . '\DDC1335User u INDEX BY u.email INNER JOIN u.phones p INDEX BY p.id', $dql);
133 private function loadFixture()
135 $p1 = array('11 xxxx-xxxx','11 yyyy-yyyy','11 zzzz-zzzz');
136 $p2 = array('22 xxxx-xxxx','22 yyyy-yyyy','22 zzzz-zzzz');
137 $p3 = array('33 xxxx-xxxx','33 yyyy-yyyy','33 zzzz-zzzz');
139 $u1 = new DDC1335User("foo@foo.com", "Foo",$p1);
140 $u2 = new DDC1335User("bar@bar.com", "Bar",$p2);
141 $u3 = new DDC1335User("foobar@foobar.com", "Foo Bar",$p3);
143 $this->_em->persist($u1);
144 $this->_em->persist($u2);
145 $this->_em->persist($u3);
158 * @Id @Column(type="integer")
164 * @Column(type="string", unique=true)
169 * @Column(type="string")
174 * @OneToMany(targetEntity="DDC1335Phone", mappedBy="user", cascade={"persist", "remove"})
178 public function __construct($email, $name, array $numbers = array())
181 $this->email = $email;
182 $this->phones = new \Doctrine\Common\Collections\ArrayCollection();
184 foreach ($numbers as $number) {
185 $this->phones->add(new DDC1335Phone($this,$number));
197 * @Column(name="id", type="integer")
203 * @Column(name="numericalValue", type="string", nullable = false)
205 public $numericalValue;
208 * @ManyToOne(targetEntity="DDC1335User", inversedBy="phones")
209 * @JoinColumn(name="user_id", referencedColumnName="id", nullable = false)
213 public function __construct($user, $number)
216 $this->numericalValue = $number;