Doctrine orm Doctrine2不需要的级联删除
我正在制作一个产品目录,有两个实体,PcatSalesItem和PcatCategory,它们之间有多对多关系。如果我删除了一个类别,但仍然有与之关联的销售项目,我希望抛出一个异常,我不希望级联删除。在RDBMS级别(PostgreSQL),在联接表中,我将外键设置为“On DELETE RESTRICT”。但是,当我删除一个包含销售项目的类别时,Doctrine会进行级联删除。我没有指定cascade=删除到原则 以下是实体:Doctrine orm Doctrine2不需要的级联删除,doctrine-orm,cascade,Doctrine Orm,Cascade,我正在制作一个产品目录,有两个实体,PcatSalesItem和PcatCategory,它们之间有多对多关系。如果我删除了一个类别,但仍然有与之关联的销售项目,我希望抛出一个异常,我不希望级联删除。在RDBMS级别(PostgreSQL),在联接表中,我将外键设置为“On DELETE RESTRICT”。但是,当我删除一个包含销售项目的类别时,Doctrine会进行级联删除。我没有指定cascade=删除到原则 以下是实体: /** * PcatSalesItem * * @ORM\T
/**
* 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
时也遇到过类似的问题;你的答案就在这一页上:我之前读过那一页,但没有看到答案。它清楚地说,;“默认情况下,不级联任何操作”。