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

标签 php orm key relationship composite

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

我希望 Doctrine 2 能解决这个问题,但事实并非如此。这是关系数据建模中的一项基本功能,但我所知道的 PHP ORM 软件都不支持它。

我最近发现 SQLAlchemy 有完整的支持,但我需要一些用于 PHP 而不是 Python 的东西。

最佳答案

当您从数据库的角度处理应用程序时,诸如 Doctrine2 (PHP) 或 Hibernate (Java) 之类的“派生”应用程序是不合适的。当您想反过来时,这些更适合(即“我有一个 OO 域模型并需要将其保存在关系数据库中”,而不是“我有一个关系数据库并想要一个(生成的?)OO 接口(interface)为此,无需在数据库方面做出任何妥协”)。如果尽管在方法上存在这些重要差异,但你仍然使用它们,并且你更喜欢你的关系模式而不是你的对象模型,你只会感到沮丧。

区分不同类别的 ORM 工具非常重要,因为它们往往侧重于不同的开发模型。

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

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

就我个人而言,我不喜欢复合键(除了没有附加数据的纯多对多链接表),因为我更倾向于从应用程序/域模型/对象方面处理事情,并且映射到对象的复合键通常很难使用,即使底层映射技术支持它们也是如此。代理键(或至少是单字段自然键)使事情变得简单得多。我不是关系数据库规范化迷信者,从我的角度来看,“更好的性能”是非常值得怀疑的。如果您在系统中遇到真正的性能问题,则偶尔保存连接并不能挽救您。

关于具有完全复合主键/外键支持的 PHP ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119657/

相关文章:

php - 如何在发票已支付且订单状态为处理中时取消订单?

php - 将数据插入具有两个外键的一张表中

php,按引用或按值的变量

arrays - Bash 间接引用关联数组

php - 为什么 php 脚本在表中添加空白字段?

c# - 我可以传入 T.Property 吗?另外,改进这种方法的想法?

java - 如何用JPQL获取数据库时间?

node.js - Postgres 级联删除使用 TypeOrm : update or delete on table "table1" violates foreign key constraint on table "table2"

SSL 查询 - 证书更新的 CSR

java - 我试图获取集合中的最后一个日期元素,但是它一直返回第一个日期元素?