我有一个父表和一个子表。在子表中是指向父表的外键。在“ondelete”上设置为“restrict”。
这是正确的,但是尽管doctrine无法删除该行,但在刷新实体时它不会引发异常。有可能拦截这种行为吗?
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* Test1
*
* @ORM\Table(name="test1")
* @ORM\Entity
*/
class Test1
{
/**
* @var integer
*
* @ORM\Column(name="id", type="bigint", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, nullable=false)
*/
private $title;
}
use Doctrine\ORM\Mapping as ORM;
/**
* Test2
*
* @ORM\Table(name="test2", indexes={@ORM\Index(name="test2_ibfk_1", columns={"idtxt1"})})
* @ORM\Entity
*/
class Test2
{
/**
* @var integer
*
* @ORM\Column(name="idt2", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $idt2;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=100, nullable=true)
*/
private $title;
/**
* @var \Test1
*
* @ORM\ManyToOne(targetEntity="Test1")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="idtxt1", referencedColumnName="id")
* })
*/
private $idtxt1;
}
CREATE TABLE `test1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `test2` (
`idt2` int(11) NOT NULL AUTO_INCREMENT,
`idtxt1` bigint(20) NOT NULL,
`title` varchar(100) DEFAULT NULL,
PRIMARY KEY (`idt2`),
KEY `idtxt1` (`idtxt1`),
CONSTRAINT `test2_ibfk_2` FOREIGN KEY (`idtxt1`) REFERENCES `test1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
答案 0 :(得分:0)
好的,我想你要问的是你可以根据有人试图删除子实体的时间来运行代码。看一下事件生命周期。我想你想添加一个带有onFlash回调的监听器。然后,您可以查看用户尝试执行的操作,并在需要时抛出异常。
http://docs.doctrine-project.org/en/2.0.x/reference/events.html