Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 当表使用通用外键模式时,如何设置条令实体关联?_Doctrine Orm_Generic Foreign Key - Fatal编程技术网

Doctrine orm 当表使用通用外键模式时,如何设置条令实体关联?

Doctrine orm 当表使用通用外键模式时,如何设置条令实体关联?,doctrine-orm,generic-foreign-key,Doctrine Orm,Generic Foreign Key,我们继承了一个第三方数据库模式,其中多个表使用一个数据库 表不直接定义外键,而是直接定义外键的设计模式 某些表通过组合两列来执行此操作的方式: 指定表名称的列: 直接(枚举类型) 或者通过另一个表(type\u id引用表types,然后在varchar列中包含表名) 从所述表格中指定PK值的列(例如,类型_值) 这会导致一行引用一个表,而另一行引用另一个表 行可能引用完全不同的表 我们可以使用查询生成器,为每个查询生成器手动定义联接和WHERE子句 这种情况下,但更实际的做法是为每个外

我们继承了一个第三方数据库模式,其中多个表使用一个数据库 表不直接定义外键,而是直接定义外键的设计模式 某些表通过组合两列来执行此操作的方式:

  • 指定表名称的列:
    • 直接(枚举
      类型
    • 或者通过另一个表(
      type\u id
      引用表
      types
      ,然后在varchar列中包含表名)
  • 从所述表格中指定PK值的列(例如,
    类型_值
这会导致一行引用一个表,而另一行引用另一个表 行可能引用完全不同的表

我们可以使用查询生成器,为每个查询生成器手动定义联接和WHERE子句 这种情况下,但更实际的做法是为每个外国人拥有一处房产 表,并使用WHERE子句仅筛选目标表结果,例如:

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设计反模式的文章。不幸的是,我们没有多少办法来改变我们这边的模式。