symfony - 同一类型实体上的 Symfony 多对多关系
问题描述
我正在尝试解决我所说的“兄弟姐妹困境”:我有一个可以有兄弟姐妹的实体人,当然这也是人。
因此,我创建了以下实体:
/**
* Person
*
* @ORM\Table(name="person")
* @ORM\Entity(repositoryClass="AppBundle\Repository\PersonRepository")
*/
class Person {
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Person", inversedBy="ref_siblings")
* @ORM\JoinTable(name="siblings",
* joinColumns={ @ORM\JoinColumn(name="person", referencedColumnName="id") },
* inverseJoinColumns={ @ORM\JoinColumn(name="sibling", referencedColumnName="id") }
* )
*/
private $siblings;
/**
* @param Person $person
*/
public function addSibling(Person $person)
{
if ($this->siblings->contains($person)) {
return;
}
$this->siblings->add($person);
$person->addSibling($this);
}
/**
* @param Person $person
*/
public function removeSibling(Person $person)
{
if (!$this->siblings->contains($person)) {
return;
}
$this->siblings->removeElement($person);
$person->removeSibling($this);
}
...
}
因此,通过向一个人添加兄弟姐妹,我可以成功地将关系存储在学说创建的关系表中:
mysql> select * from siblings;
+--------+---------+
| person | sibling |
+--------+---------+
| 681 | 715 |
+--------+---------+
到目前为止,一切都很好。
但是,它并没有满足我的要求。当前的解决方案显示了人 681 的兄弟姐妹,但不是人 715。我需要有一些东西来存储反面的关系,因为人 715 也有兄弟姐妹 - 即人 681。
有没有一种方便的方法来存储这样的关系:
mysql> select * from siblings;
+--------+---------+
| person | sibling |
+--------+---------+
| 681 | 715 |
| 715 | 681 |
+--------+---------+
我发现的唯一解决方法是在 PersonController 类中执行以下操作:
foreach($person->getSiblings() as $sibling) {
$sibling->addSibling($person);
$em->persist($sibling);
}
$em->flush();
但是,如果我尝试删除兄弟姐妹,这并不能解决问题。
解决方案
推荐阅读
- javascript - JavaScript 是什么导致我的代码中出现“未定义”?
- ios - 在 Swift 中解析 JSON 数据
- powershell - PowerShell 微延迟
- maven - 如何定义Maven失败的条件?
- c - 从标准输入中读取一个自然数 n。找到小于或等于 n 的最大完全平方
- java - 将内容从 void 方法保存到变量
- excel - 根据当前日期在单元格中输入
- android - 将 android Instrumented 测试 json 文件放在哪里
- sql - 连接表格的正确技术?
- javascript - 第一次在 React Native 中完成时如何切换到第二个输入