一个实体与另一个实体有 2 个 ManyToOne 关系
One entity having 2 ManyToOne relations to the same other entity
我正在使用 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;
[...]
}
我试图在 Wedding 实体(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.
什么是好的关系,ManyToOne 或 ManyToMany,因为每个 Wedding 都与 2 个角色相关?如何让它与 Doctrine 一起工作?
谢谢大家的建议!
小灰
我建议在 Wedding
和 Character
实体之间建立 ManyToMany
关系,如果字符 1 和字符 2 之间没有这样的特定原因或区别
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;
}
我正在使用 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;
[...]
}
我试图在 Wedding 实体(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.
什么是好的关系,ManyToOne 或 ManyToMany,因为每个 Wedding 都与 2 个角色相关?如何让它与 Doctrine 一起工作?
谢谢大家的建议!
小灰
我建议在 Wedding
和 Character
实体之间建立 ManyToMany
关系,如果字符 1 和字符 2 之间没有这样的特定原因或区别
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;
}