Doctrine orm 不会删除Doctrine2关联实体

Doctrine orm 不会删除Doctrine2关联实体,doctrine-orm,associations,Doctrine Orm,Associations,目前,在使用两个实体并将它们映射到自己的关联实体时,Doctrine2存在问题。我在这里完全复制了这篇博客文章中的实体类: 在我的示例中,我使用了一个PHPUnit测试,在该测试中,我按照以下方式播放场景。但与博客帖子不同的是,我的关联实体没有被删除!phpunit测试用例失败了,我希望公司只剩下一份工作,而剩下的两个人一个也没有 这发生在我自己的项目中,我试图将示例正确地映射到我的案例中,但示例也不起作用。是否对禁止删除协会实体的原则进行了任何更改 $entityManager = $

目前,在使用两个实体并将它们映射到自己的关联实体时,Doctrine2存在问题。我在这里完全复制了这篇博客文章中的实体类:

在我的示例中,我使用了一个PHPUnit测试,在该测试中,我按照以下方式播放场景。但与博客帖子不同的是,我的关联实体没有被删除!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());

提前感谢:-)

我认为这篇文章可能有点误导甚至不正确。明确地从个人和公司中删除作业,看看会发生什么。即使使用
$personTwo->removeJob($job)$公司->删除作业($job)作业的实际大小仍然是2,而不是预期的1:-(您将需要执行一个显式的$em->remove($job);只有在删除个人或公司实体时,级联功能才会起作用。