php - 学说 2 删除父行

标签 php mysql doctrine-orm

我定义了两个数据库实体

项目:

use Doctrine\ORM\Mapping as ORM;
use \Kdyby\Doctrine\Entities\MagicAccessors;

/**
 * @ORM\Entity
 */
class Project extends \Kdyby\Doctrine\Entities\BaseEntity
{


    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    public $id;

    /**
     * @ORM\Column(type="string")
     */
    public $title;

    /**
     * @ORM\Column(type="text")
     * @var string
     */
    public $description;
    /**
     * @ORM\Column(type="datetime", nullable=true)
     * @var DateTime
     */
    public $created;

    /**
     * @ORM\Column(type="boolean")
     * @var string
     */
    public $public;

    /**
     * @ORM\Column(type="blob")
     * @var string
     */
    public $thumbnail;

    public function __construct()
    {
        $this->created = new \DateTime();
        $this->public = 0;
    }

}

及人物:

use Doctrine\ORM\Mapping as ORM;
use \Kdyby\Doctrine\Entities\MagicAccessors;

/**
 * @ORM\Entity
 */
class Personage extends \Kdyby\Doctrine\Entities\BaseEntity
{


    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     */
    public $id;

    /**
     * @ORM\Column(type="string")
     */
    public $name;

    /**
     * @ORM\Column(type="text", nullable=true)
     * @var string
     */
    public $shortDescription;

    /**
     * @ORM\Column(type="text", nullable=true)
     * @var string
     */
    public $playerDescription;

    /**
     * @ORM\Column(type="datetime")
     * @var DateTime
     */
    public $created;

    /**
     * @ORM\Column(type="integer")
     * @var string
     */
    public $creator;


    /**
     * @ORM\Column(type="boolean", options={"default" = false})
     * @var boolean
     */
    public $inGraph;

    /**
     * @ORM\Column(type="boolean", nullable=false, options={"default" = 0})
     * @var boolean
     */
    public $deleted;

    /**
     * @ORM\ManyToOne(targetEntity="Project", cascade={"persist", "remove"})
     * @ORM\JoinColumn(name="project", referencedColumnName="id", onDelete="CASCADE")
     * @var string
     */
    public $project_id;

    public function __construct()
    {
        $this->deleted = 0;
        $this->inGraph = 0;
    }
}

每个人物实体都属于某个项目。但是每当我尝试以这种方式删除 Personage 时:

public function removeChar($id)
    {
        $a = $this->EntityManager->find('App\Personage', $id);

        if($a->deleted)
        {
            $this->EntityManager->remove($a);
            $this->EntityManager->flush();
        }

    }

或使用 dql。它还会删除整个项目行。我想要的是,无论何时删除项目,它都会删除所有对应的字符,但不会删除其他字符。

我试图删除

cascade={"persist", "remove"}

来自项目实体声明(并通过控制台更新数据库)但它说一切都同步并且什么也没做。所以我删除了整个数据库并在没有 cascade={"persist", "remove"} 的情况下构建它,但问题没有解决。

最佳答案

中删除 onDelete="CASCADE"

@ORM\JoinColumn(name="project", referencedColumnName="id", onDelete="CASCADE")

并添加

@ORM\OneToMany(targetEntity="Personage", mappedBy="project_id",cascade={"remove"})
private $personages;

在项目实体中。

关于php - 学说 2 删除父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157739/

相关文章:

sql - MySQL:数据透视+计数

mysql - mysql - 如何按最多两列排序,这两个列在MySQL中可以为空?

Symfony 尝试在设置参数中使用 id 数组

php - 通过 graph api 搜索 Facebook 用户视频?

php - 如何在对象数组中找到 max 属性?

mysql - SQL:如何搜索具有最新日期和 amount_used 中最多值的数据?

php - Doctrine 2,HINT_FORCE_PARTIAL_LOAD 不会获取连接的实体

php - 如何从特定日期起 30 天内获取确切日期?

php - 当我添加 root 密码时,XAMPP 未将 "unsecure"更新为 "secure"

doctrine-orm - Doctrine 2 通过复合键一对一