【问题标题】:Not finding field in polymorphic association with Doctrine2在与 Doctrine2 的多态关联中找不到字段
【发布时间】:2012-03-23 06:06:35
【问题描述】:

我有一个多态关联(类表继承),我需要使用 DQL 来查询特定子类的实体,这可以在 WHERE 子句中使用“x INSTANCE OF Entity”来完成。现在我需要为该子类设置特定的条件,但出现此错误:

“班级人员没有名为 student_field_1 的关联”

Person = 父类

员工 = 子类

学生 = 子班

你有什么方法可以告诉 Doctrine 这个人实际上是一个学生,并允许我将学生字段放在 WHERE 中?

【问题讨论】:

  • 您当前的 (yml) 架构是什么样的?
  • 您可以发布您的查询生成器代码吗?我也有类似的问题,但我以某种方式解决了它。需要知道你是否也有同样的问题;)

标签: php doctrine doctrine-orm


【解决方案1】:

听起来“映射超类”更适合您尝试做的事情,因为它不需要父/子之间的显式链接,它只是简单的继承。

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/inheritance-mapping.html#mapped-superclasses

使用类表继承,您需要提供通过键链接两个实体的鉴别器映射。

"子类的表应该通过外键约束链接到父类的表"

【讨论】:

  • 我看不出映射的超类对查询有何帮助。顺便说一句,我需要这 3 个表,因为这就是数据库现在的方式
【解决方案2】:

如果你只是查询学生,那你为什么不这样做呢?

SELECT s FROM Student s WHERE s.student_field_1 = ...

【讨论】:

  • 它实际上是一个关联。例如:car.person(可以是员工或学生)
  • 糟糕,很抱歉。您所问的有一个功能请求:doctrine-project.org/jira/browse/DDC-16
  • 是的本杰明,这就是问题所在。该功能未实现。知道是否有任何解决方法吗?
  • 不幸的是,我想不出任何体面的解决方法......一个效率低下且复杂的方法是返回Entity.person INSTANCE OF Student 的所有实体,然后手动过滤掉返回的实体。但在你的情况下,我想我宁愿检查我是否可以重构我的模型,以便我的实体直接具有 Student 关系,而不是 Person。
  • 那么在执行查询之前“动态”地从 Person(在映射中)更改为 Student 的关系呢?有可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多