Пример #1
0
 /**
  * @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']);
 }
Пример #2
0
 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());
 }