gpt4 book ai didi

php - ORM Doctrine ManyToOne 更新 CASCADE (Symfony)

转载 作者:可可西里 更新时间:2023-10-31 23:10:04 27 4
gpt4 key购买 nike

我有两个实体

class Promotor
{

/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor")
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false)
*/
protected $ciudad;

class Ciudad
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="nombre", type="string", length=50)
*/
private $nombre;

一个“Promotor”可以住在一个“Ciudad”(城市)。在一个“Ciudad”(城市)中可以居住许多“Promotores”。

如果我在 JoinColumn 中添加 onDelete="CASCADE"

/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor")
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected $ciudad;

它生成下一个代码

ALTER TABLE promotor DROP FOREIGN KEY FK_BF20A37FE8608214;
ALTER TABLE promotor ADD CONSTRAINT FK_BF20A37FE8608214 FOREIGN KEY (ciudad_id)
REFERENCES Ciudad (id) ON DELETE CASCADE

但我也喜欢在更新时执行 CASCADE。我尝试使用 onUpdate="CASCADE"但它不起作用

[Doctrine\Common\Annotations\AnnotationException]
[Creation Error] The annotation @ORM\JoinColumn declared on property Web\PromotorBundle\Entity\Promotor::$ciudad does not have a property named
"onUpdate". Available properties: name, referencedColumnName, unique, nulla
ble, onDelete, columnDefinition, fieldName

根据错误,我了解到属性 onUpdate 不存在,但是..有什么方法可以在更新时进行级联吗?

最佳答案

onDelete="CASCADE"用于数据库级别。正如您已经说过的,没有 onUpdate。另一个缺点是 ON DELETE CASCADE 仅适用于 InnoDB。它不适用于 MyISAM。

但是你可以使用 Doctrine 内存级联操作:

class Promotor
{

/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"})
* @ORM\JoinColumn(name="ciudad_id", referencedColumnName="id", nullable=false)
*/
protected $ciudad;

文档中均有描述:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations

此外,您可以跳过 JoinColumn 批注,因为您编写它的方式是默认配置,它是隐式生成的。

所以你可以这样写:

class Promotor
{

/**
* @ORM\ManyToOne(targetEntity="Ciudad", inversedBy="promotor", cascade={"persist", "remove"})
*/
protected $ciudad;

关于php - ORM Doctrine ManyToOne 更新 CASCADE (Symfony),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16200990/

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