gpt4 book ai didi

symfony - 多对多关系,orphanRemoval

转载 作者:行者123 更新时间:2023-12-02 04:32:50 28 4
gpt4 key购买 nike

我有 2 个实体:

  • 轨迹
  • 引用资料

在每个Locus上我们可以定义很多不同的References,一个Reference可以被很多Locus使用。然后我有一个 ManyToMany 关系。

但是,在我的例子中,如果不通过 Locus 链接,Reference 就什么都不是,我不想将它保留在我的 BDD 中。

尝试列表:

  • 引用拥有的关系:
    • ReferenceEntity 中的 orphanRemoval(在拥有方):删除 Locus
    • LocusEntity 中的 orphanRemoval(在 InversedSide 上):什么都不做
  • Locus 拥有的关系:
    • ReferenceEntity 中的 orphanRemoval(在 InversedSide 上):什么也不做
    • LocusEntity 中的 orphanRemoval(在拥有方):删除 Reference 尽管被其他 Locus 使用

引用.php

/**
* Reference
*
* @ORM\Table(name="reference")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ReferenceRepository")
*/
class Reference
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Locus", inversedBy="references")
*/
private $locus;

public function addLocus(Locus $locus)
{
if (!$this->locus->contains($locus)) {
$this->locus->add($locus);
$locus->addReference($this);
}

return $this;
}

public function removeLocus(Locus $locus)
{
if ($this->locus->contains($locus)) {
$this->locus->removeElement($locus);
}

return $this;
}

public function getLocus()
{
return $this->locus;
}

轨迹.php

/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\LocusRepository")
*/
class Locus extends GeneticEntry
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Reference", mappedBy="locus", orphanRemoval=true)
*/
private $references;

public function addReference(Reference $reference)
{
$this->references->add($reference);

return $this;
}

public function removeReference(Reference $reference)
{
if ($this->references->contains($reference)) {
$this->references->removeElement($reference);
}

return $this;
}

public function getReferences()
{
return $this->references;
}

最佳答案

目前我选择在 postUpdate 事件上使用 EventListener,我测试 ArrayCollection,如果为空,我删除实体:

ReferenceListener.php:

<?php

namespace AppBundle\EventListener;

use AppBundle\Entity\Reference;
use Doctrine\ORM\Event\LifecycleEventArgs;

class ReferenceListener
{
public function postUpdate(LifecycleEventArgs $args)
{
$object = $args->getObject();
if (!$object instanceof Reference) {
return;
}

// If the Reference have no Locus and no Chromosomes, delete it
if ($object->getLocus()->isEmpty() && $object->getChromosomes()->isEmpty()) {
$args->getEntityManager()->remove($object);
$args->getEntityManager()->flush();
}
}
}

关于symfony - 多对多关系,orphanRemoval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037493/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com