Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / ORM / Functional / Ticket / DDC163Test.php
1 <?php
2
3 namespace Doctrine\Tests\ORM\Functional\Ticket;
4
5 use Doctrine\Tests\Models\Company\CompanyPerson;
6
7 require_once __DIR__ . '/../../../TestInit.php';
8
9 class DDC163Test extends \Doctrine\Tests\OrmFunctionalTestCase
10 {
11     protected function setUp()
12     {
13         $this->useModelSet('company');
14         parent::setUp();
15     }
16
17     /**
18      * @group DDC-163
19      */
20     public function testQueryWithOrConditionUsingTwoRelationOnSameEntity()
21     {
22         $p1 = new CompanyPerson;
23         $p1->setName('p1');
24
25         $p2 = new CompanyPerson;
26         $p2->setName('p2');
27
28         $p3 = new CompanyPerson;
29         $p3->setName('p3');
30
31         $p4 = new CompanyPerson;
32         $p4->setName('p4');
33
34         $p1->setSpouse($p3);
35         $p1->addFriend($p2);
36         $p2->addFriend($p3);
37
38         $p3->addFriend($p4);
39
40         $this->_em->persist($p1);
41         $this->_em->persist($p2);
42         $this->_em->persist($p3);
43         $this->_em->persist($p4);
44
45         $this->_em->flush();
46         $this->_em->clear();
47
48         $dql = 'SELECT PARTIAL person.{id,name}, PARTIAL spouse.{id,name}, PARTIAL friend.{id,name}
49             FROM  Doctrine\Tests\Models\Company\CompanyPerson person
50             LEFT JOIN person.spouse spouse
51             LEFT JOIN person.friends friend
52             LEFT JOIN spouse.friends spouse_friend
53             LEFT JOIN friend.friends friend_friend
54             WHERE person.name=:name AND (spouse_friend.name=:name2 OR friend_friend.name=:name2)';
55
56         $q = $this->_em->createQuery($dql);
57         $q->setParameter('name', "p1");
58         $q->setParameter('name2', "p4");
59         $result = $q->getScalarResult();
60
61         $this->assertEquals('p3', $result[0]['spouse_name']);
62         $this->assertEquals('p1', $result[0]['person_name']);
63         $this->assertEquals('p2', $result[0]['friend_name']);
64     }
65 }