对于现有的PHP应用程序,需要一个简单的ORM或DBAL

San*_*hal 6 php orm dbal notorm

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

所以,我正在寻找一个简单的DBAL ORM,我可以很容易地进入并开始使用.所需功能:

  • 它必须适用于现有的数据库架构.优选地,具有最少的或没有额外的配 现有的数据库模式与现有的PHP代码质量相同(没有合理的命名约定,没有规范化等).我不想花费数天时间将数据库模式手动转换为带注释的对象属性,即教条2.
  • 它必须能够与现有的原始mysql_*查询一起工作.当脚本手动操作数据库背后的数据时,我不知道像Doctrine 2或Propel这样的ORM如何表现,但我认为它并不漂亮.
  • 它必须在PHP 5.2.x上运行.我很喜欢使用PHP 5.3,但我有打算在现有的125K线面条代码混乱,以确保它运行在PHP 5.3零利率.
  • 不需要关系.在少数地方,我需要去的关系数据,我会很高兴地调用额外的find()query()或任何自己.
  • 如果它具有一些触发支持(例如beforeSave,afterSave),则奖励积分.不是要求,但很高兴.

编辑:有人让我摆脱了痛苦.我刚刚发现125K行的spaghetti代码也改变了数据库模式.例如,在某处添加一个额外的选项,一大堆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();
Run Code Online (Sandbox Code Playgroud)

要么:

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

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

m4r*_*4rc 11

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

它也以巴黎的形式实施了积极的记录.

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

  • 几个星期以来,我一直在申请中使用 Idiorm 和 Paris,我非常喜欢它! (2认同)