我正在使用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个不同的ManyToOne关系,但是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.
既然每次婚礼都与2个角色有关,那么多对多还是多对多有什么良好的关系?如何使其与Doctrine一起使用?
感谢您的所有建议!
灰
如果字符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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句