Add an article to the category
public addArticle ( |
||
$article |
/** * @dataProvider entityManagerDataProvider * @param EntityManager $em */ public function testPersist(EntityManager $em) { // Persist a forward relationship $time1 = new \DateTime(); $time1->modify('-1 Hour'); $time2 = new \DateTime(); $article1 = new Article(); $article1->setId(201)->setTitle('Article 201')->setTimeCreated($time1)->setLastModified($time1); $article2 = new Article(); $article2->setId(202)->setTitle('Article 202')->setTimeCreated($time2)->setLastModified($time2); $category1 = new Category(); $category1->setId(1000)->setName('Category 1000'); $category2 = new Category(); $category2->setId(1001)->setName('Category 1001'); $category3 = new Category(); $category3->setId(1003)->setName('Category 1003'); $category1->addArticle($article1)->addArticle($article2); $em->persist($category1)->persist($category2)->persist($category3)->persist($article1)->persist($article2)->flush(); // Update the category's article list by removing an entity on the inverse side /** @var Article $article */ $article = $em->retrieve(Article::class, 201); $article->setCanonicalCategory($category2); $em->persist($article)->flush(); // Break the relationship - this should force the $category1 -> $article1 relationship to be indirectly broken $category3->addArticle($article2); $em->persist($category3)->flush(); }
/** * Testing race conditions of new entities, without a flush between persist calls * * @see: docs/RaceConditions.md * @dataProvider entityManagerDataProvider * @param EntityManager $em */ public function testOneToManyRaceNoFlush(EntityManager $em) { $time = new \DateTime(); $article1 = new Article(); $article1->setId(201)->setTitle('Article 201')->setTimeCreated($time)->setLastModified($time); $category1 = new Category(); $category1->setId(201)->setName('Category 201'); $category1->addArticle($article1); $em->persist($category1)->persist($article1)->flush(); /** @var Article|OrmProxyInterface $r_article */ $r_article = $em->retrieve(Article::class, 201); $this->assertEquals('Article 201', $r_article->getTitle()); // Should make DB query here $r_category = $r_article->getCanonicalCategory(); $this->assertTrue($r_category instanceof Category); // Check inverse side too - /** @var Category|OrmProxyInterface $ir_category */ $ir_category = $em->retrieve(Category::class, 201); $this->assertEquals('Category 201', $ir_category->getName()); // Should make DB query here $ir_articles = $ir_category->getArticles(); $this->assertCount(1, $ir_articles); $ir_article = $ir_articles[0]; $this->assertTrue($ir_article instanceof Article); }
/** * @dataProvider entityManagerDataProvider * @param EntityManager $em */ public function testDeleteRelationships(EntityManager $em) { $article1 = new Article(); $article1->setId(301)->setTitle('Article 301'); $article2 = new Article(); $article2->setId(302)->setTitle('Article 302'); $category1 = new Category(); $category1->setId(351)->setName('Category 351'); $category1->addArticle($article1)->addArticle($article2); $em->persist($category1)->persist($article1)->persist($article2)->flush(); $this->assertTrue($this->exists($em, 'article', '301')); $key = $this->getRelKey($em, 'article', 'category', '301', 'canonical_category', RelationshipType::MANYTOONE()); $this->assertEquals('351', $em->getDriver()->getSingleValueIndex($key)); /** @var Article $article */ $article = $em->retrieve(Article::class, 301); $article->setId(399); $em->delete($article)->flush(); $this->assertFalse($this->exists($em, 'article', '301')); $this->setExpectedException(NotFoundException::class); $em->getDriver()->retrieve($key); }