代码之家  ›  专栏  ›  技术社区  ›  theazureshadow

可维护性的抽象连接?

  •  1
  • theazureshadow  · 技术社区  · 14 年前

    有人知道一个可以抽象连接的ORM吗?我正在使用PHP,但我可以从任何地方获取想法。我用过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 回复  |  直到 14 年前
        1
  •  2
  •   James Gaunt    14 年前

    一种可能是将此联接作为视图写入数据库。然后可以在视图上使用任何查询工具。

    Microsofts实体框架还支持代码实体和数据库表之间非常复杂的映射,甚至跨数据库。您作为示例给出的查询在从表的连接映射到实体方面很容易得到支持。然后,可以使用LINQ对得到的连接数据执行进一步的查询。当然,如果您使用的是PHP,这可能对您没有太大的用处。

    但是,我不知道有一个产品会以您所展示的方式将连接包装成进一步查询的语法。