我想在一个特定值(不在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)');
这就是为什么我认为:
向SQL表class_b
添加新列。像这样的东西:
ALTER TABLE class_b ADD key_id BIGINT;
并添加索引:
ALTER TABLE class_b ADD INDEX (key_id);