php - 现有 PHP 应用程序需要一个简单的 ORM 或 DBAL

标签 php orm dbal notorm

我正在努力扩展现有的 PHP 应用程序。不幸的是,现有的应用程序一团糟。这都是带有原始 mysql_* 调用的意大利面条代码。呻吟。我不会在扩展的部分中这样做。

因此,我正在寻找一个简单的 DBAL ORM,我可以轻松地投入使用并开始使用。所需功能:

  • 它必须适用于现有的数据库模式。最好有最少的或没有额外的配置。现有的数据库模式与现有的 PHP 代码具有相同的质量(没有合理的命名约定,未规范化等)。我不想花几天时间将数据库模式手动转换为带注释的对象属性,这是 Doctrine 2。
  • 它必须能够与现有的原始 mysql_* 查询一起工作。我不知道当脚本在背后手动操作数据库中的数据时,像 Doctrine 2 或 Propel 这样的保湿 ORM 表现如何,但我认为它并不漂亮。
  • 它必须在 PHP 5.2.x 上运行。我喜欢使用 PHP 5.3,但我对检查现有的 125,000 行乱七八糟的代码以确保它在 PHP 5.3 上运行没有兴趣。
  • 不需要关系。在我需要获取关系数据的少数地方,我很乐意调用额外的 find()query() 或任何我自己的东西。
  • 如果它有一些触发器支持(例如 beforeSaveafterSave),则加分。不是必需的,但很高兴拥有。

编辑:有人把我从痛苦中解救出来。我刚刚发现 125K 行的意大利面条代码也更改了数据库模式。例如,在某处添加一个额外的选项,然后一大堆 ALTER TABLE 语句开始运行。我可能可以用这个代码库填满一年的 TheDailyWTF。所以,还有一个要求:

  • 必须能够自动应对不断变化的数据库架构(例如添加列)。

我一直在寻找一些解决方案,但我不确定在满足要求的情况下它们的效果如何。 Doctrine 2、RedBeanPhp 之类的都需要 PHP 5.3,所以出局了。有一个用于 PHP 5.2.x 的旧版 RedBeanPhp,但我不知道它是否适用于困惑的现有数据库模式。 NotORM 看起来可以取出数据,但我不知道它是否可以针对现有数据库模式进行配置,以及如何轻松地将数据放回数据库。

理想情况下,我想要一些简单的东西。例如:

$user = User::find($id);
$user->name = 'John Woo';
$user->save();

或者:

$articles = ORM::find('article')->where('date' => '2010-01-01');
foreach ($articles as $article) {
    echo $article->name;
}

欢迎任何提示甚至替代解决方案!

最佳答案

我用... http://github.com/j4mie/idiorm/

它也以巴黎的形式有一个活跃的记录实现。

关于您的编辑。 Idiorm 应对不断变化的模式,语法几乎与您在问题中想要的类型完全匹配。

关于php - 现有 PHP 应用程序需要一个简单的 ORM 或 DBAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721768/

相关文章:

php - 用于更新的 PDO 准备语句无法正常工作

php - 将 MySQL 插入从逗号分隔转换为管道

database - ORM 与序列化数组?

php - PHP MySQL 更新连接表中的简单 ORM

php - 我应该在获取后手动关闭数据库连接和语句的游标吗?

php - Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?

php - 构造函数注入(inject)与方法注入(inject)

php - 计算哪些时区在 PHP 上具有特定的当前本地时间

java - hibernate 对不同的列使用两个外键?

php - 学说 DBAL 2 : fetchAll() unnecessary array dimensions