教义关系与主键不符

时间:2019-12-13 09:30:42

标签: symfony doctrine symfony4

我想要在2个symfony实体上以特定值(而不是ID)创建关系OneToMany

这是我尝试过的:

    class ClassA
    {
        ...

        /**
         * @ORM\ManyToOne(targetEntity="App\Entity\ClassB", inversedBy="list")
         * @ORM\JoinColumn(referencedColumnName="key_id")
         */
        private $classB;
    }

    class ClassB
    {
        ...

        /**
         * @ORM\OneToMany(targetEntity="App\Entity\classA", mappedBy="classB")
         */
        private $list;

        /**
         * @ORM\Column(type="integer")
        */
        private $keyId;
   }

这是我的迁移:

    $this->addSql('ALTER TABLE class_a ADD CONSTRAINT FK_D4FDD1F49D16CBF9 FOREIGN KEY (class_b_id) REFERENCES class_b (key_id)');

对我来说看起来不错。 如迁移所言,class_b中的引用为key_id

但我收到此问题消息:

  

执行'ALTER TABLE class_a ADD CONSTRAINT FK_D4FDD1F49D16CBF9 FOREIGN KEY(class_b_id)REFERENCES class_b(keyId)'时发生异常:
  SQLSTATE [HY000]:常规错误:3734无法添加外键约束。引用表'class_b'中约束'FK_D4FDD1F49D16CBF9'缺少列'key_id'

我做错了什么? 我在文档中错过了什么?

谢谢您的帮助

编辑1

@spirit谢谢,我认为使用bigInt会更好。但这没什么改变...

$this->addSql('CREATE TABLE class_b (id INT AUTO_INCREMENT NOT NULL, key_id BIGINT NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
    $this->addSql('ALTER TABLE class_a ADD CONSTRAINT FK_D4FDD1F49D16CBF9 FOREIGN KEY (class_b_id) REFERENCES class_b (key_id)');

enter image description here

2 个答案:

答案 0 :(得分:0)

在SQL表class_b中添加新列。像这样:

ALTER TABLE class_b ADD key_id BIGINT;

并添加索引:

ALTER TABLE class_b ADD INDEX (key_id);

答案 1 :(得分:0)

这就是为什么我认为:

It's not yet supported...