ChartPage と BaseChart の間に OneToMany 関係があります。
1 ChartPage holds 1 BaseChart
と1 BaseChart holds many ChartPages
チャートはアプリケーションの別のバンドルで管理されているため、個別に削除できます。私が望んでいるのは、Chart が削除されたときに、Doctrine が ChartPage.Chart 参照を自動的に削除することですが、他には何も削除しません ( ChartPage を削除しないでください)。
逆に、すべてをそのままにしておく必要があります。参照されている BaseChart を使用して ChartPage を削除しても、何も起こらないはずです ( BaseChartは削除されません)。
私はこれらのいずれかですべての組み合わせを試しました:cascade="{detach,merge,refresh,remove,persist}"
私が考えることができるが、私はそれを把握することはできません..
これは私のマッピングです:
<?php
/**
* Class ChartPage
* @package VBCMS\Bundle\AdminBundle\Document\Page
* @Serializer\AccessType("public_method")
* @MongoDB\Document()
*/
class ChartPage extends BasePage {
/**
* @var BaseChart
* @Serializer\Type("VBCMS\Bundle\StatisticBundle\Document\BaseChart")
* @Serializer\Accessor(setter="setChartDeserialize")
* @MongoDB\ReferenceOne(
* targetDocument="VBCMS\Bundle\StatisticBundle\Document\BaseChart",
* mappedBy="pages",
* cascade={"persist,detach,merge"}
* )
*/
protected $chart;
}
/
/**
* Class BaseChart
* @package VBCMS\Bundle\StatisticBundle\Document
* @Serializer\AccessType("public_method")
* @MongoDB\Document(
* collection="Chart",
* repositoryClass="VBCMS\Bundle\StatisticBundle\Repository\ChartRepository"
* )
*/
class BaseChart {
/**
* @var BasePage[]|Collection
* @Serializer\Exclude()
* @MongoDB\ReferenceMany(
* targetDocument="VBCMS\Bundle\AdminBundle\Document\Page\ChartPage",
* inversedBy="chart",
* cascade={"persist,detach,merge"}
* )
*/
protected $pages;
}
私が残した唯一のアイデアは、BasePage が削除される前に参照を元に戻すカスタム preRemove EventListener を作成するNULL
ことですが、この手動の混乱を回避できることを願っていました。