Doctrine orm Doctrine2不需要的级联删除

Doctrine orm Doctrine2不需要的级联删除,doctrine-orm,cascade,Doctrine Orm,Cascade,我正在制作一个产品目录,有两个实体,PcatSalesItem和PcatCategory,它们之间有多对多关系。如果我删除了一个类别,但仍然有与之关联的销售项目,我希望抛出一个异常,我不希望级联删除。在RDBMS级别(PostgreSQL),在联接表中,我将外键设置为“On DELETE RESTRICT”。但是,当我删除一个包含销售项目的类别时,Doctrine会进行级联删除。我没有指定cascade=删除到原则 以下是实体: /** * PcatSalesItem * * @ORM\T

我正在制作一个产品目录,有两个实体,PcatSalesItem和PcatCategory,它们之间有多对多关系。如果我删除了一个类别,但仍然有与之关联的销售项目,我希望抛出一个异常,我不希望级联删除。在RDBMS级别(PostgreSQL),在联接表中,我将外键设置为“On DELETE RESTRICT”。但是,当我删除一个包含销售项目的类别时,Doctrine会进行级联删除。我没有指定cascade=删除到原则

以下是实体:

/**
 * 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();

任何帮助都将不胜感激

我在使用
cascade=all
时也遇到过类似的问题;你的答案就在这一页上:我之前读过那一页,但没有看到答案。它清楚地说,;“默认情况下,不级联任何操作”。