为了可维护性而抽象加入?

时间:2010-11-09 19:59:53

标签: mysql orm join

有没有人知道可以抽象JOIN的ORM?我正在使用PHP,但我会从任何地方接受想法。我使用过Doctrine ORM,但我不确定它是否支持这个概念。

我希望能够指定一个实际上是复杂查询的关系,然后在其他查询中使用该关系。这主要是为了可维护性,因此我没有很多复制代码,如果我的架构发生变化,必须更改。这在理论上是否可行(至少对于“复杂查询”的某些子集)?

这是我正在谈论的一个例子:

ORM.defineRelationship('Message->Unresponded', '
  LEFT JOIN Message_Response
    ON Message.id = Message_Response.Message_id
  LEFT JOIN Message AS Response
    ON Message_Response.Response_id = Response.id
  WHERE Response.id IS NULL
');

ORM.query('
  SELECT * FROM Message
  SUPER_JOIN Unresponded
');

对于纯粹发明的语法感到抱歉。我不知道是否存在这样的事情。如果它确实会很复杂。

1 个答案:

答案 0 :(得分:2)

一种可能性是将此连接写为数据库中的视图。然后,您可以在视图上使用任何查询工具。

Microsofts Entity Framework还支持代码实体和数据库表之间非常复杂的映射,甚至跨越数据库。您从表的连接到实体的映射方面很容易支持您作为示例提供的查询。然后,您可以使用LINQ对生成的连接数据执行进一步的查询。当然,如果您使用的是PHP,这对您来说可能不是很大的用途。

但是我不知道有一个产品以你显示的方式将连接包含在进一步查询的语法中。