gpt4 book ai didi

php - 学说 2 删除父行

转载 作者:行者123 更新时间:2023-11-30 22:26:04 26 4
gpt4 key购买 nike

我定义了两个数据库实体

项目:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com