Doctrine2关联实体未被删除

时间:2016-03-11 12:01:19

标签: doctrine-orm associations

目前,当使用两个实体并将它们与自己的关联实体映射时,我对Doctrine2存在问题。我完全复制了这个博客文章中的实体类:http://future500.nl/articles/2013/09/doctrine-2-how-to-handle-join-tables-with-extra-columns/

在我的示例中,我使用了PHPUnit Test,我按以下方式播放场景。但博客文章的不同之处在于,我的关联实体未被删除! phpunit测试用例失败了,我希望该公司只剩下一份工作而没有人工作。

在我自己的项目中发生了这种情况,我试图将示例正确并将其映射到我的案例,但示例也不起作用。是否有任何更改的学说会阻止删除关联实体?

$entityManager     = $this->entityManager;
$personRepository  = $entityManager->getRepository(Person::class);
$companyRepository = $entityManager->getRepository(Company::class);

// Setup the person and company
$person = new Person();
$person->setName('Person 1');

$company = new Company();
$company->setName('Company 1');

$entityManager->persist($person);
$entityManager->persist($company);
$entityManager->flush();


// Create the job to connect Person 1 and Company 1
$job = new Job();
$job->setStartedOn(new \DateTime('01-10-2009'))
    ->setMonthlySalary(10000);

$person->addJob($job);
$company->addJob($job);
$entityManager->flush();


// Assert that both the company and the person have one job
$entityManager->clear();

/* @var $person Person */
$person = $personRepository->findOneBy(['id' => 1]);

/* @var $company Company */
$company = $companyRepository->findOneBy(['id' => 1]);

$this->assertCount(1, $person->getJobs());
$this->assertCount(1, $company->getJobs());


// Add another person to the company
$person = new Person();
$person->setName('Person 2');

$job = new Job();
$job->setStartedOn(new \DateTime('16-02-2006'))
    ->setMonthlySalary(10000); // He wishes!

$person->addJob($job);
$company->addJob($job);
$entityManager->persist($person);
$entityManager->flush();


// Assert that the company now has two jobs and each person one
$entityManager->clear();

/* @var $personOne Person */
$personOne = $personRepository->findOneBy(['id' => 1]);

/* @var $personTwo Person */
$personTwo = $personRepository->findOneBy(['id' => 2]);

/* @var $company Company */
$company = $companyRepository->findOneBy(['id' => 1]);

$this->assertCount(2, $company->getJobs());
$this->assertCount(1, $personOne->getJobs());
$this->assertCount(1, $personTwo->getJobs());


// Now remove the job from the Person Two
$job = $person->getJobs()[0];
$personTwo->removeJob($job);
$entityManager->flush();


// Assert that the company now has one jobs and person two none
$entityManager->clear();

/* @var $personOne Person */
$personOne = $personRepository->findOneBy(['id' => 1]);

/* @var $personTwo Person */
$personTwo = $personRepository->findOneBy(['id' => 2]);

/* @var $company Company */
$company = $companyRepository->findOneBy(['id' => 1]);

$this->assertCount(1, $company->getJobs());
$this->assertCount(1, $personOne->getJobs());
$this->assertCount(0, $personTwo->getJobs());

提前致谢: - )

0 个答案:

没有答案