3 namespace Doctrine\Tests\ORM\Functional\Ticket;
5 use Doctrine\Common\Collections\ArrayCollection;
7 use Doctrine\Tests\Models\CMS\CmsComment;
8 use Doctrine\Tests\Models\CMS\CmsArticle;
9 use Doctrine\Tests\Models\CMS\CmsUser;
11 require_once __DIR__ . '/../../../TestInit.php';
16 class DDC1545Test extends \Doctrine\Tests\OrmFunctionalTestCase
24 public function setUp()
26 $this->useModelSet('cms');
30 private function initDb($link)
32 $article = new CmsArticle();
33 $article->topic = 'foo';
34 $article->text = 'foo';
36 $user = new CmsUser();
37 $user->status = 'foo';
38 $user->username = 'foo';
41 $user2 = new CmsUser();
42 $user2->status = 'bar';
43 $user2->username = 'bar';
47 $article->user = $user;
50 $this->_em->persist($article);
51 $this->_em->persist($user);
52 $this->_em->persist($user2);
56 $this->articleId = $article->id;
57 $this->userId = $user->id;
58 $this->user2Id = $user2->id;
61 public function testLinkObjects()
65 // don't join association
66 $article = $this->_em->find('Doctrine\Tests\Models\Cms\CmsArticle', $this->articleId);
68 $user = $this->_em->find('Doctrine\Tests\Models\Cms\CmsUser', $this->userId);
70 $article->user = $user;
76 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
77 ->setParameter('id', $this->articleId)
78 ->getOneOrNullResult();
80 $this->assertNotNull($article->user);
81 $this->assertEquals($user->id, $article->user->id);
84 public function testLinkObjectsWithAssociationLoaded()
90 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
91 ->setParameter('id', $this->articleId)
92 ->getOneOrNullResult();
94 $user = $this->_em->find('Doctrine\Tests\Models\Cms\CmsUser', $this->userId);
96 $article->user = $user;
101 $article = $this->_em
102 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
103 ->setParameter('id', $this->articleId)
104 ->getOneOrNullResult();
106 $this->assertNotNull($article->user);
107 $this->assertEquals($user->id, $article->user->id);
110 public function testUnlinkObjects()
114 // don't join association
115 $article = $this->_em->find('Doctrine\Tests\Models\Cms\CmsArticle', $this->articleId);
117 $article->user = null;
122 $article = $this->_em
123 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
124 ->setParameter('id', $this->articleId)
125 ->getOneOrNullResult();
127 $this->assertNull($article->user);
130 public function testUnlinkObjectsWithAssociationLoaded()
135 $article = $this->_em
136 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
137 ->setParameter('id', $this->articleId)
138 ->getOneOrNullResult();
140 $article->user = null;
145 $article = $this->_em
146 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
147 ->setParameter('id', $this->articleId)
148 ->getOneOrNullResult();
150 $this->assertNull($article->user);
153 public function testChangeLink()
155 $this->initDb(false);
157 // don't join association
158 $article = $this->_em->find('Doctrine\Tests\Models\Cms\CmsArticle', $this->articleId);
160 $user2 = $this->_em->find('Doctrine\Tests\Models\Cms\CmsUser', $this->user2Id);
162 $article->user = $user2;
167 $article = $this->_em
168 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
169 ->setParameter('id', $this->articleId)
170 ->getOneOrNullResult();
172 $this->assertNotNull($article->user);
173 $this->assertEquals($user2->id, $article->user->id);
176 public function testChangeLinkWithAssociationLoaded()
178 $this->initDb(false);
181 $article = $this->_em
182 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
183 ->setParameter('id', $this->articleId)
184 ->getOneOrNullResult();
186 $user2 = $this->_em->find('Doctrine\Tests\Models\Cms\CmsUser', $this->user2Id);
188 $article->user = $user2;
193 $article = $this->_em
194 ->createQuery('SELECT a, u FROM Doctrine\Tests\Models\Cms\CmsArticle a LEFT JOIN a.user u WHERE a.id = :id')
195 ->setParameter('id', $this->articleId)
196 ->getOneOrNullResult();
198 $this->assertNotNull($article->user);
199 $this->assertEquals($user2->id, $article->user->id);