3

我正在处理产品目录,并且有两个实体 PcatSalesItem 和 PcatCategory,它们之间存在多对多关系。如果我删除了一个类别,并且仍然有与之关联的销售项目,我希望抛出异常,我不希望级联删除。在 RDBMS 级别(PostgreSQL)上,在连接表中,我已将外键设置为“ON DELETE RESTRICT”。但是,当我删除具有销售项目的类别时,Doctrine 会进行级联删除。我没有在任何地方指定 cascade=remove 到 Doctrine!

以下是实体:

/**
 * PcatSalesItem
 *
 * @ORM\Table(name="pcat_sales_item")
 * @ORM\Entity
 * @Gedmo\Loggable(logEntryClass="Qi\Bss\BaseBundle\Entity\Business\LogEntryBusiness")
 */
class PcatSalesItem
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="pcat_sales_item_id_seq", allocationSize=1, initialValue=1)
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=64, nullable=false)
     * @Gedmo\Versioned
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="text", nullable=true)
     * @Gedmo\Versioned
     */
    private $description;

    /**
     * @var array $categories
     *
     * @ORM\ManyToMany(targetEntity="PcatCategory")
     * @ORM\JoinTable(name="pcat_category_x_sales_item",
     *      joinColumns={@ORM\JoinColumn(name="sales_item_id", referencedColumnName="id", onDelete="RESTRICT")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="RESTRICT")}
     *      )
     */
    private $categories;
    ...
}

/**
 * PcatCategory
 *
 * @ORM\Table(name="pcat_category")
 * @ORM\Entity
 * @Gedmo\Loggable(logEntryClass="Qi\Bss\BaseBundle\Entity\Business\LogEntryBusiness")
 */
class PcatCategory
{

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="pcat_category_id_seq", allocationSize=1, initialValue=1)
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=64, nullable=false)
     * @Gedmo\Versioned
     */
    private $name;

    /**
     * @var array $salesItems
     *
     * @ORM\ManyToMany(targetEntity="PcatSalesItem")
     * @ORM\JoinTable(name="pcat_category_x_sales_item",
     *      joinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="RESTRICT")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="sales_item_id", referencedColumnName="id", onDelete="RESTRICT")}
     *      )
     */
    private $salesItems;
    ....
}

这是我用来删除类别的代码:

$em = $this->getDoctrine()->getManager();
$cat = $em->getRepository('QiBssBaseBundle:PcatCategory')->find(15);
$em->remove($cat);
$em->flush();

任何帮助将不胜感激!

4

0 回答 0