gpt4 book ai didi

symfony - 如何删除可以在 "OneToMany"关系中的实体

转载 作者:行者123 更新时间:2023-12-01 04:35:12 27 4
gpt4 key购买 nike

我有两个实体:PersonAddress

  • 一个可以有一个地址
  • 一个 Address 可以通过 Person 自给自足。

我已经创建了这样的关系:

地址

/**
* @ORM\OneToMany(targetEntity="Person", mappedBy="address", cascade={"detach"})
*/
protected $persons;

/**
* @ORM\ManyToOne(targetEntity="Address", inversedBy="persons", cascade={"detach"})
* @ORM\JoinColumn(name="address_id", referencedColumnName="id")
*/
protected $address;

当我现在尝试删除与 Person 相关的 Address 时,当然会导致“Integrity constraint violation ”。我如何告诉 doctrine 简单地从 Person分离 Address。如果尝试对两者都使用 cascade={"detach"} 但没有任何反应。

最佳答案

人:

/**
* @ORM\ManyToOne(targetEntity="Address", inversedBy="persons")
* @ORM\JoinColumn(name="address_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $address;

地址:

/**
* @ORM\OneToMany(targetEntity="Person", mappedBy="address", cascade={"all"})
*/
protected $persons;

此设置非常适合我。当您删除地址时,person 将在 address_id 中获得 NULL。如果您执行以下操作,Cascade all in Address 也会保存新人员:

$address->setPersons(
array( $person1, $person2 )
) ;

$person 会在哪里:

$person1 = new Person() ;
$person1->setName(....) ;

如果这不起作用,请发送来自 Controller 或单元测试的代码。它应该只是最基本的代码;如果您使用地址,您只需保留地址实体。个人实体也一样。你不需要坚持两者, Doctrine 会解决这个问题。

关于symfony - 如何删除可以在 "OneToMany"关系中的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13396761/

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