不具有主键的文档关系

问题描述 投票:0回答:2

我想在一个特定值(不在ID上)的2个symfony实体上创建关系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

symfony doctrine symfony4
2个回答
0
投票

这就是为什么我认为:

It's not yet supported...


0
投票

向SQL表class_b添加新列。像这样的东西:

ALTER TABLE class_b ADD key_id BIGINT;

并添加索引:

ALTER TABLE class_b ADD INDEX (key_id);
© www.soinside.com 2019 - 2024. All rights reserved.