我在更新实体时遇到问题。
每个用户只能位于一个组中。
用户的架构为:
- id INT
- 用户名字符串
- group_id 整数默认值 空
组的架构为:
- id INT
- 名称字符串
组.php
class Group {
/**
* @ORMOneToMany(targetEntity="SaprizoEntityUser", mappedBy="group", cascade={"all"})
*/
protected $users;
public function setUsers($users) {
foreach ($users as $user) {
$user->setGroup($this);
}
$this->users = $users;
}
}
用户.php
class User {
/**
* @ORMManyToOne(targetEntity="SaprizoStatisticsEntityGroup", inversedBy="users", cascade={"all"})
* @ORMJoinColumn(name="group_id", referencedColumnName="id", nullable=true)
*/
protected $group;
}
当我尝试将新用户添加到组时,例如
$group->setUsers(array($user1, $user2));
$em->persist($group);
$em->flush();
它保存所有值。
但是当我尝试从组中删除所有用户时,例如
$group->setUsers(array());
$em->persist($group);
$em->flush();
它什么都不做。据我了解,在设置一个空数组并将其保存在用户 1 和用户 2 的列group_id后,应该更改为 null
.
教义注释有误吗?
如果你看一下你的setUsers函数,你会注意到当你传递一个emtpy数组时(就像你尝试删除所有用户时所做的那样),foreach循环被简单地跳过,用户实体的group_id被维护。
尽管mbinette的答案是正确的,但我建议创建一个单独的功能来删除用户。根据 mbinette 的建议,添加新用户时,您必须添加数组中的所有用户,因为您首先删除了它们。
public function removeUsers() {
foreach ($this->users as $user) {
$user->setGroup(null);
}
}
这不是教义注释中的错误。您永远不会从组中删除旧用户。将它们添加到组后,您需要手动删除它们。只需更改您的setUsers()
方法即可。
public function setUsers($users) {
//Remove old users first
foreach ($this->users as $user) {
$user->setGroup(null);
}
//Now we can add the new ones and replace the array
foreach ($users as $user) {
$user->setGroup($this);
}
$this->users = $users;
}