首页 > 解决方案 > 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();
    }

`

谢谢你的帮助 :)

标签: phpmysqlsqlsymfony4symfony5

解决方案


OneToMany两边都有,没用。
我认为你的意思是做ManyToManywhere Colorscan be referenced by manyCables和 a Cablecan 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;

推荐阅读