提问人:onizukaek 提问时间:10/6/2023 最后编辑:onizukaek 更新时间:10/8/2023 访问量:22
使用 Doctrine ManyToMany 定义进行迁移时出现的问题
Issue when making migration with Doctrine ManyToMany definition
问:
我正在使用 symfony 6,在执行 make:migration 命令时遇到问题,我实际上想绑定 2 个名为 Team 和 User 的实体。 在团队实体下方
#[ORM\Entity(repositoryClass: TeamRepository::class)]
class Team
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column(length: 255, nullable: true)]
private ?string $name = null;
#[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'teams')]
#[ORM\JoinTable(name: "team_users")]
#[ORM\JoinColumn(name: "user_id", referencedColumnName: "uuid")]
#[ORM\InverseJoinColumn(name: "team_id", referencedColumnName: "id")]
private Collection $members;
...
在 User 实体下方:
#[ORM\Entity(repositoryClass: UserRepository::class)]
class User
{
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\Column(type: 'uuid', unique: true)]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
#[Groups([GRP_USER_READ, SerializationGroups::REST])]
private $uuid;
#[Groups([GRP_USER_READ, SerializationGroups::REST])]
#[ORM\Column(type: 'string', length: 180, unique: true)]
#[Assert\NotBlank]
#[Assert\Email]
private $email;
#[ORM\Column(type: 'json')]
#[Groups([GRP_USER_READ, SerializationGroups::REST])]
private $roles = [];
#[ORM\Column(type: 'string')]
private $password;
#[ORM\ManyToMany(targetEntity: Team::class, mappedBy: 'members')]
private Collection $teams;
...
然后,当我清除缓存并启动 make:migration 时,我直接得到一个异常:
针对 App\Entity\Team 中的关系引用的列名称“uuid” 朝向 App\Entity\User 不存在。
检查数据库和 User 实体中的所有内容后,名为 uuid 的字段是正确的。
我对 php8 属性的工作原理有点困惑,我从这里的 doctrine 文档中举了这个例子,是否缺少一些东西来正确定义这种关系?
答:
0赞
onizukaek
10/8/2023
#1
解决了,实际上这是属性配置中的误解,我在 User 实体中移动了拥有方,并在 Team 实体中留下了一个引用,所以这是您在 User 中得到的内容:
#[ORM\ManyToMany(targetEntity: Team::class, inversedBy: 'members')]
#[ORM\JoinTable(name: "user_teams")]
#[ORM\JoinColumn(name: "user_id", referencedColumnName: "uuid")]
#[ORM\InverseJoinColumn(name: "team_id", referencedColumnName: "id")]
private Collection $teams;
在团队中:
#[ORM\ManyToMany(targetEntity: "User", mappedBy: 'teams')]
private Collection $members;
评论