Doctrine外键在一个索引而不是另一个索引?

时间:2016-09-27 15:47:29

标签: doctrine-orm doctrine symfony

所以我正在尝试设置一个系统,其中多个表的行可以处于多种状态之一,可以直接在表中查看而无需查找表。所以我使用的是学说,当我使用referencedColumnName =“id”时,我有一个工作正常的ManyToOne关系。

/**
 * @ORM\ManyToOne(targetEntity="DataBundle\State", cascade={"persist"})
 * @ORM\JoinColumn(name="State", referencedColumnName="id" )
 */
protected $State;

然而,一旦我将referencedColumnName更改为name(我实际想要的值),这不起作用,我得到“常规错误:1215无法添加外键约束”

/**
 * @ORM\ManyToOne(targetEntity="DataBundle\State", cascade={"persist"})
 * @ORM\JoinColumn(name="State", referencedColumnName="name" )
 */
protected $State;

我的目标是让任何表格都放入其中以使列状态处于我的状态名称可见的状态之一。现在它工作,外键设置但它只显示ID,一旦我更改名称我得到错误。为清楚起见,我的状态表有2列,id和name 1是一个int,另一个是varchar 255。

我读过这可能是因为不同的数据库引擎或不同的数据类型。所有引擎类型都是相同的,我没有在任何地方定义$ State列的类型,它是从doctrine继承的。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

我认为基于不同@JoinColumnDatatypes不正确。

您可以在主要实体上使用列状态执行此操作,只需使用“状态”限制您的查询。 flag(数据类型为boolean或integer)。我认为这将是一个更好的主意。

我可能不会真正理解你想达到的目标是什么。