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

具有完全复合主键/外键支持的PHP ORM

  •  6
  • Daimon  · 技术社区  · 13 年前

    我正在寻找PHP5 ORM,它完全支持基于复合主键和外键的复合(多列)关系。

    我希望Doctrine 2能解决这个问题,但它没有。它是关系数据建模的一个基本特性,但据我所知,没有一个PHORM软件支持它。

    4 回复  |  直到 13 年前
        1
  •  4
  •   romanb    13 年前

    当您从数据库的角度接近应用程序时,像Doctrine2(PHP)或Hibernate(Java)这样的“派生”应用程序是不合适的。如果你想反过来(即“我有一个面向对象的域模型,需要将它持久化在一个关系数据库中”,而不是“我有一个关系数据库,想要一个(生成的?)”,那么这些更适合面向对象的接口,而不会在数据库方面做出任何妥协)。如果你使用它们,尽管在方法上有着如此重要的差异,而且你更喜欢你的关系模式而不是你的对象模型,你只会感到沮丧。

    也许可以试试Propel或RedBeanPHP,它似乎适合于数据库驱动的开发模型,几乎没有映射,只是简单地生成(通常是哑的)“数据对象”,也没有太多抽象。外键字段只是直接放在这些解决方案中的对象中,所以它们可能“支持”您想要的所有组合内容。

    像Doctrine2或Hibernate这样的解决方案不鼓励使用组合键,因此只在一定程度上支持它们(Hibernate做得很好,但是不建议使用它们)。

    就我个人而言,我不喜欢组合键(除了没有额外数据的纯多对多链接表),因为我倾向于从应用程序/域模型/对象端处理更多的事情,而映射到对象的组合键通常是一个很难处理的问题,即使底层的映射技术支持它们。代理键(或者至少是单字段自然键)使事情简单得多。我不是一个关系数据库规范化恋物癖和“更好的性能”是高度怀疑从我的角度。如果系统中存在真正的性能问题,则保存偶尔的连接不会节省您的时间。

        2
  •  1
  •   Daimon    13 年前

    原则2.1完全解决了这个问题。

        3
  •  0
  •   trix    13 年前

    来自Doctrine2参考:

    原则2允许使用复合材料 主键。但也有一些 反对使用单个 标识符。使用 支持简单(非复合) 主键,这意味着您只能 以前你自己的主要价值观 实体。

    指定复合主键/ 标识符,只需放置@Id标记 主键。

        4
  •  0
  •   Matthew    12 年前

    LEAP ORM ,它是用PHP 5编写的。在github上可以找到 https://github.com/spadefoot/kohana-orm-leap .

    尽管它是为 Kohana PHP Framework ,只需向代码中添加一个简单的自动加载函数,就可以轻松地使它与任何PHP框架一起工作。Leap可用于以下数据库:DB2、trizzle、Firebird、MariaDB、MS-SQL、MySQL、Oracle、PostgreSQL和SQLite。它还提供查询生成器和数据库连接池。

    在ORM的网站上,有很多 examples and tutorials