Exemple #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']);
 }
 public function testSelfReferencingManyToMany()
 {
     $person1 = new CompanyPerson();
     $person1->setName('Roman');
     $person2 = new CompanyPerson();
     $person2->setName('Jonathan');
     $person1->addFriend($person2);
     $this->assertEquals(1, count($person1->getFriends()));
     $this->assertEquals(1, count($person2->getFriends()));
     $this->_em->persist($person1);
     $this->_em->persist($person2);
     $this->_em->flush();
     $this->_em->clear();
     $query = $this->_em->createQuery('select p, f from Doctrine\\Tests\\Models\\Company\\CompanyPerson p join p.friends f where p.name=?1');
     $query->setParameter(1, 'Roman');
     $result = $query->getResult();
     $this->assertEquals(1, count($result));
     $this->assertEquals(1, count($result[0]->getFriends()));
     $this->assertEquals('Roman', $result[0]->getName());
     $friends = $result[0]->getFriends();
     $this->assertEquals('Jonathan', $friends[0]->getName());
 }