DDC163Test.php 1.8 KB

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