我正在使用 Symfony5。我有 2 个具有关系的实体:角色和婚礼。
每个角色可以有多个婚礼。 每个婚礼都与 2 个不同的角色相关。
/**
* @ORM\Entity(repositoryClass=CharacterRepository::class)
*/
class Character
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=50, nullable=true)
*/
private $firstName;
/**
* @ORM\Column(type="string", length=50, nullable=true)
*/
private $lastName;
[...]
和婚礼:
/**
* @ORM\Entity(repositoryClass=WeddingRepository::class)
*/
class Wedding
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=4, nullable=true)
*/
private $startYear;
/**
* @ORM\Column(type="string", length=4, nullable=true)
*/
private $endYear;
[...]
}
我尝试在婚礼实体(persona1 和 persona2)中设置 2 个不同的多对一关系,但 persona1 和 persona2 具有相同的 inversedBy="weddings",所以它不起作用。
我也尝试了 2 个 ManyToMany 关系,但 Doctrine 不喜欢它:
// Character
/**
* @ORM\ManyToMany(targetEntity=Wedding::class, mappedBy="persona1")
*/
private $weddings1;
/**
* @ORM\ManyToMany(targetEntity=Wedding::class, mappedBy="persona2")
*/
private $weddings2;
// Wedding
/**
* @ORM\ManyToMany(targetEntity=Character::class, inversedBy="weddings1")
*/
private $persona1;
/**
* @ORM\ManyToMany(targetEntity=Character::class, inversedBy="weddings2")
*/
private $persona2;
The mappings App\Entity\Wedding#persona2 and App\Entity\Character#weddings are inconsistent with each other.
什么是好的关系,ManyToOne 或 ManyToMany,因为每个婚礼都与 2 个字符相关?如何让它与 Doctrine 一起工作?
感谢所有建议!
灰
答案 0 :(得分:0)
如果字符 1 和字符 2 之间没有这样的特定原因或区别,我建议在 ManyToMany
和 Wedding
实体之间有 Character
关系
class Character
{
// ...
/**
* @ORM\ManyToMany(targetEntity=Wedding::class, mappedBy="characters")
*/
private $weddings;
}
class Wedding
{
// ...
/**
* @ORM\ManyToMany(targetEntity=Character::class, inversedBy="weddings")
*/
private $characters;
}
如果您有更多角色要分配给婚礼,您可以通过这种方式在未来进行缩放
如果根据您的需要需要针对字符 1 或字符 2 执行任何严格的操作,那么您可以使用 OneToMany
和 ManyToOne
作为
class Character
{
// ...
/**
* @ORM\OneToMany(targetEntity=Wedding::class, mappedBy="characterA")
*/
private $weddingsA;
/**
* @ORM\OneToMany(targetEntity=Wedding::class, mappedBy="characterB")
*/
private $weddingsB;
}
class Wedding
{
// ...
/**
* @ORM\ManyToOne(targetEntity=Character::class, inversedBy="weddingsA")
*/
private $characterA;
/**
* @ORM\ManyToOne(targetEntity=Character::class, inversedBy="weddingsB")
*/
private $characterB;
}