php - Symfony 5 - OneToMany 没有出现在我的 mysql 数据库中
问题描述
所以我有两张桌子:一张是“电缆”-> 主要一张,另一张是“颜色”
因此,我在电缆内创建了一个名为颜色的实体,该实体通过 OneToMany 关系链接到颜色表。但问题是,当其他 ManyToOne 关系出现时,migration:migrate 不会出现在我的数据库中。
这是我的 migration.php 文件中的内容:
`
final class Version20210411225338 extends AbstractMigration
{
public function getDescription() : string
{
return '';
}
public function up(Schema $schema) : void
{
// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE cables DROP FOREIGN KEY FK_9A9430025ED47289');
$this->addSql('DROP INDEX IDX_9A9430025ED47289 ON cables');
$this->addSql('ALTER TABLE cables DROP couleurs_id');
$this->addSql('ALTER TABLE colors ADD cables_id INT NOT NULL');
$this->addSql('ALTER TABLE colors ADD CONSTRAINT FK_C2BEC39F4DE1706A FOREIGN KEY (cables_id) REFERENCES cables (id)');
$this->addSql('CREATE INDEX IDX_C2BEC39F4DE1706A ON colors (cables_id)');
}
public function down(Schema $schema) : void
{
// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE cables ADD couleurs_id INT NOT NULL');
$this->addSql('ALTER TABLE cables ADD CONSTRAINT FK_9A9430025ED47289 FOREIGN KEY (couleurs_id) REFERENCES colors (id)');
$this->addSql('CREATE INDEX IDX_9A9430025ED47289 ON cables (couleurs_id)');
$this->addSql('ALTER TABLE colors DROP FOREIGN KEY FK_C2BEC39F4DE1706A');
$this->addSql('DROP INDEX IDX_C2BEC39F4DE1706A ON colors');
$this->addSql('ALTER TABLE colors DROP cables_id');
}
}
` 我的 Cable.php 文件:
`
/**
* @return Collection|Colors[]
*/
public function getCouleurs(): Collection
{
return $this->couleurs;
}
public function addCouleur(Colors $couleur): self
{
if (!$this->couleurs->contains($couleur)) {
$this->couleurs[] = $couleur;
$couleur->setCables($this);
}
return $this;
}
public function removeCouleur(Colors $couleur): self
{
if ($this->couleurs->removeElement($couleur)) {
// set the owning side to null (unless already changed)
if ($couleur->getCables() === $this) {
$couleur->setCables(null);
}
}
return $this;
}
/**
* @ORM\OneToMany(targetEntity=Colors::class, mappedBy="cables")
*/
private $couleurs;
`
还有我的 colors.php 文件:
`
/**
* @ORM\OneToMany(targetEntity=Cables::class, mappedBy="couleurs")
*/
private $cables;
public function __construct()
{
$this->cables = new ArrayCollection();
}
`
谢谢你的帮助 :)
解决方案
OneToMany
两边都有,没用。
我认为你的意思是做ManyToMany
where Colors
can be referenced by manyCables
和 a Cable
can have many Colors
。
由于您在每一侧都有一个集合并且您管理来自 的关系Cable
,因此您应该与拥有方具有多对多双向关系Cable
。尝试如下调整映射。
电缆:
/**
* @ORM\ManyToMany(targetEntity=Colors::class, inversedBy="cables")
* @JoinTable(name="cables_colors")
*/
private $couleurs;
颜色:
/**
* @ORM\ManyToMany(targetEntity=Cables::class, mappedBy="couleurs")
*/
private $cables;
推荐阅读
- visual-c++ - 使用 /WX 编译器选项,Visual C++ 不应该构建我的程序,但它确实
- c# - 为.NET中的列表应用补丁的正确方法是什么
- c++ - 查找存储在优先级队列中的值的有效方法
- python - 创建受密码保护的 Samba 存储池
- asp.net-core - ASP.NET Core JWT 访问令牌吊销
- python - 多处理池映射:AttributeError:无法腌制本地对象
- visual-studio - 在 VisualStudio 2019 中强制使用 packages.config
- multithreading - 模板参数推导/替换在多线程中失败
- c++ - Boost Bind 和 async_wait
- python - 如何确定数据框是否为空白