ins*_*ere 2 doctrine one-to-many symfony
我有两个实体:a Person
和an Address
.
Person
可以有一个Address
Address
可以自给自足Person
.我创造了这样的关系:
地址
/**
* @ORM\OneToMany(targetEntity="Person", mappedBy="address", cascade={"detach"})
*/
protected $persons;
Run Code Online (Sandbox Code Playgroud)
人
/**
* @ORM\ManyToOne(targetEntity="Address", inversedBy="persons", cascade={"detach"})
* @ORM\JoinColumn(name="address_id", referencedColumnName="id")
*/
protected $address;
Run Code Online (Sandbox Code Playgroud)
当我现在尝试删除与其结果Address
相关的Person
结果时,当然是在" 完整性约束违规 "中.我怎么能告诉学说简单地分离的Address
距离Person
.如果尝试使用cascade={"detach"}
两者但没有任何反应.
人:
/**
* @ORM\ManyToOne(targetEntity="Address", inversedBy="persons")
* @ORM\JoinColumn(name="address_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $address;
Run Code Online (Sandbox Code Playgroud)
地址:
/**
* @ORM\OneToMany(targetEntity="Person", mappedBy="address", cascade={"all"})
*/
protected $persons;
Run Code Online (Sandbox Code Playgroud)
这个设置对我来说很完美.删除地址时,person将在address_id中获取NULL.如果您执行以下操作,Cascade all in Address也将保存新人:
$address->setPersons(
array( $person1, $person2 )
) ;
Run Code Online (Sandbox Code Playgroud)
$ person的地方是:
$person1 = new Person() ;
$person1->setName(....) ;
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,请从控制器或单元测试发送代码.它应该是最基本的代码; 如果你使用地址,你只需坚持地址实体.对于人实体也是如此.你不需要坚持两者,学说会照顾到这一点.
归档时间: |
|
查看次数: |
6576 次 |
最近记录: |