/** * @group DDC-163 */ public function testQueryWithOrConditionUsingTwoRelationOnSameEntity() { $p1 = new CompanyPerson(); $p1->setName('p1'); $p2 = new CompanyPerson(); $p2->setName('p2'); $p3 = new CompanyPerson(); $p3->setName('p3'); $p4 = new CompanyPerson(); $p4->setName('p4'); $p1->setSpouse($p3); $p1->addFriend($p2); $p2->addFriend($p3); $p3->addFriend($p4); $this->_em->persist($p1); $this->_em->persist($p2); $this->_em->persist($p3); $this->_em->persist($p4); $this->_em->flush(); $this->_em->clear(); $dql = 'SELECT PARTIAL person.{id,name}, PARTIAL spouse.{id,name}, PARTIAL friend.{id,name} FROM Doctrine\\Tests\\Models\\Company\\CompanyPerson person LEFT JOIN person.spouse spouse LEFT JOIN person.friends friend LEFT JOIN spouse.friends spouse_friend LEFT JOIN friend.friends friend_friend WHERE person.name=:name AND (spouse_friend.name=:name2 OR friend_friend.name=:name2)'; $q = $this->_em->createQuery($dql); $q->setParameter('name', "p1"); $q->setParameter('name2', "p4"); $result = $q->getScalarResult(); $this->assertEquals('p3', $result[0]['spouse_name']); $this->assertEquals('p1', $result[0]['person_name']); $this->assertEquals('p2', $result[0]['friend_name']); }
public function testSelfReferencingOneToOne() { $manager = new CompanyManager(); $manager->setName('John Smith'); $manager->setSalary(100000); $manager->setDepartment('IT'); $manager->setTitle('CTO'); $wife = new CompanyPerson(); $wife->setName('Mary Smith'); $wife->setSpouse($manager); $this->assertSame($manager, $wife->getSpouse()); $this->assertSame($wife, $manager->getSpouse()); $this->_em->persist($manager); $this->_em->persist($wife); $this->_em->flush(); //var_dump($this->_em->getConnection()->fetchAll('select * from company_persons')); //var_dump($this->_em->getConnection()->fetchAll('select * from company_employees')); //var_dump($this->_em->getConnection()->fetchAll('select * from company_managers')); $this->_em->clear(); $query = $this->_em->createQuery('select p, s from Doctrine\\Tests\\Models\\Company\\CompanyPerson p join p.spouse s where p.name=\'Mary Smith\''); $result = $query->getResult(); $this->assertEquals(1, count($result)); $this->assertTrue($result[0] instanceof CompanyPerson); $this->assertEquals('Mary Smith', $result[0]->getName()); $this->assertTrue($result[0]->getSpouse() instanceof CompanyEmployee); $this->assertEquals('John Smith', $result[0]->getSpouse()->getName()); $this->assertSame($result[0], $result[0]->getSpouse()->getSpouse()); }