删除限制外键时,doctrine2刷新失败

时间:2014-08-06 14:58:34

标签: exception doctrine-orm flush

我有一个父表和一个子表。在子表中是指向父表的外键。在“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

1 个答案:

答案 0 :(得分:0)

好的,我想你要问的是你可以根据有人试图删除子实体的时间来运行代码。看一下事件生命周期。我想你想添加一个带有onFlash回调的监听器。然后,您可以查看用户尝试执行的操作,并在需要时抛出异常。

http://docs.doctrine-project.org/en/2.0.x/reference/events.html