Doctrine orm 当表使用通用外键模式时,如何设置条令实体关联?
我们继承了一个第三方数据库模式,其中多个表使用一个数据库 表不直接定义外键,而是直接定义外键的设计模式 某些表通过组合两列来执行此操作的方式:Doctrine orm 当表使用通用外键模式时,如何设置条令实体关联?,doctrine-orm,generic-foreign-key,Doctrine Orm,Generic Foreign Key,我们继承了一个第三方数据库模式,其中多个表使用一个数据库 表不直接定义外键,而是直接定义外键的设计模式 某些表通过组合两列来执行此操作的方式: 指定表名称的列: 直接(枚举类型) 或者通过另一个表(type\u id引用表types,然后在varchar列中包含表名) 从所述表格中指定PK值的列(例如,类型_值) 这会导致一行引用一个表,而另一行引用另一个表 行可能引用完全不同的表 我们可以使用查询生成器,为每个查询生成器手动定义联接和WHERE子句 这种情况下,但更实际的做法是为每个外
- 指定表名称的列:
- 直接(枚举
)类型
- 或者通过另一个表(
引用表type\u id
,然后在varchar列中包含表名)types
- 直接(枚举
- 从所述表格中指定PK值的列(例如,
)类型_值
class Foo {
private $id; // PK for Foo
private $type; // string (enum), e.g. 'bar' or 'baz'
private $type_id; // contains PK of Bar or Baz, respectivelly
private $bar; // references entity Bar
private $baz; // references entity Baz
}
我找到的最接近我们需要的东西是使用CriteriaAPI
在getter方法中动态更新WHERE子句(如图所示)
但是,我完全不知道如何在中设置条令注释
这个案子。条令是否支持这样的DB模式,或者我们必须这样做
返回到通过查询生成器或DQL手动生成每个查询 注意,我确定DB设计模式的正式名称是什么,其中一列中有表名,另一列中有ID。如果有人能提供名称,我将不胜感激——然后我会相应地编辑/标记问题。Django将此功能称为
GenericForeignKey
,我感觉我会找到很多关于为什么它是DB设计反模式的文章。不幸的是,我们没有多少办法来改变我们这边的模式。