【发布时间】:2018-03-20 12:05:14
【问题描述】:
我有三个实体,我们称它们为 Site、Category 和 Tag。在这种情况下,Category 和 Tag 具有从 Site 实体生成的复合 ID 和不唯一的外部 ID(site 和 id 一起是唯一的)。 Category 与 Tag 具有多对多关系。 (尽管我的问题也可以通过多对一关系重现。)
Site 实体:
/**
* @ORM\Entity
*/
class Site
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
}
Category 实体:
/**
* @ORM\Entity
*/
class Category extends AbstractSiteAwareEntity
{
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\ManyToMany(targetEntity="Tag")
*/
private $tags;
}
Tag 实体:
/**
* @ORM\Entity
*/
class Tag extends AbstractSiteAwareEntity
{
/**
* @ORM\Column(type="string")
*/
private $name;
}
最后两个实体继承自 AbstractSiteAwareEntity 类,它定义了复合索引:
abstract class AbstractSiteAwareEntity
{
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Site")
*/
public $site;
/**
* @ORM\Id
* @ORM\Column(type="integer")
*/
public $id;
}
作为 ManyToOne 关系的示例,让我们想象一个 Post 实体,它有一个自增 ID 和对 Category 的引用:
/**
* @ORM\Entity
*/
class Post
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
public $id;
/**
* @ORM\ManyToOne(targetEntity="Category")
*/
private $category;
/**
* @ORM\Column(type="string")
*/
private $title;
/**
* @ORM\Column(type="string")
*/
private $content;
}
使用bin/console doctrine:schema:update --dump-sql --force --complete 更新架构时,出现以下异常:
执行 'ALTER TABLE category_tag ADD 时发生异常 约束 FK_D80F351812469DE2 外键(category_id)参考 类别 (id) ON DELETE CASCADE':
SQLSTATE[HY000]:一般错误:1005 无法创建表
xxxxxxx.#sql-3cf_14b6(errno: 150 "外键约束为 格式不正确")
我不确定可能出了什么问题……我的实体定义是否有错误?或者这是一个 Doctrine 错误?
注意:我在 Symfony 3.4 上使用教义/dbal 2.6.3。
【问题讨论】:
标签: php mysql symfony doctrine-orm doctrine