j4mie/idiorm

PHP5的一个轻量级、几乎零配置的对象关系映射器和流畅查询构建器

安装次数: 1,258,815

依赖项: 40

建议者: 0

安全: 0

星标: 2,007

关注者: 112

分支: 369

开放问题: 5

v1.5.8 2022-07-18 03:49 UTC

This package is auto-updated.

Last update: 2024-09-19 04:31:45 UTC


README

idiorm master branch Latest Stable Version Total Downloads Code Climate

https://j4mie.github.io/idiormandparis/

仅维护模式

自版本1.5.0起,Idiorm和Paris被认为是功能完整的。虽然它们将继续通过错误修复进行维护,但从此刻起将不再添加新功能。这意味着如果拉取请求会对API造成破坏性更改或需要库的除补丁版本以外的其他版本号提升,则它将不会合并。

请勿提交功能请求或API破坏性更改,因为它们将被无礼地关闭。

我应该使用Idiorm/Paris吗?

如果你正在启动一个新项目

不推荐你在新项目中使用Idiorm或Paris。

我建议你使用Laravel的数据库库,它由Taylor基于Idiorm编写。这意味着那里有许多相同的思想,但它维护得更活跃,并且有更现代的代码风格。

如果你有基于Idiorm或Paris的现有项目

你可以继续使用这两个项目,因为它们将继续接收安全补丁和错误修复。重要的是要注意,如果它们需要的更改会破坏向后兼容性,那么未来的PHP版本可能不会得到支持。

此时,你可以选择使用另一个数据库库,如Laravel中的Eloquent(见上文中“如果你正在启动一个新项目”部分),或者你可以决定分支Idiorm和/或Paris以使用自己的修改修补它们。

但是,为什么?

有关此项目的状态的更多信息,请参阅#360

PHP5及以上版本的轻量级、几乎零配置的对象关系映射器和流畅查询构建器。

在PHP 5.2.0+上进行了测试 - 可能可以通过PDO和正确的数据库驱动程序在早期版本上运行。

BSD许可下发布。

另请参阅:Paris,一个基于Idiorm构建的Active Record实现。

功能

  • 使简单的查询和简单的CRUD操作变得完全无痛。
  • 当需要更复杂的SQL时,它会退到一边。
  • 基于PDO构建。
  • 在整个过程中使用预处理语句来保护免受SQL注入攻击。
  • 不需要模型类,不需要XML配置,也不需要代码生成:只需提供一个连接字符串即可开箱即用。
  • 由一个名为ORM的主要类组成。其他类以Idiorm为前缀。全局命名空间污染最小。
  • 数据库无关。目前支持SQLite、MySQL、Firebird和PostgreSQL。可能支持其他数据库,请试一试!
  • 支持具有方法链的模型集合,以便可以一次过滤或应用操作到多个结果。
  • 支持多连接
  • 遵循PSR-1规范的方法(任何方法都可以用驼峰命名法调用,而不是下划线,例如:find_many()变为findMany()) - 您需要PHP 5.3+

文档

文档托管在Read the Docs上:idiorm.rtfd.org

构建文档

您需要安装Sphinx,然后在docs文件夹中运行

make html

文档现在位于docs/_build/html/index.html

让我们看看一些代码

$user = ORM::for_table('user')
    ->where_equal('username', 'j4mie')
    ->find_one();

$user->first_name = 'Jamie';
$user->save();

$tweets = ORM::for_table('tweet')
    ->select('tweet.*')
    ->join('user', array(
        'user.id', '=', 'tweet.user_id'
    ))
    ->where_equal('user.username', 'j4mie')
    ->find_many();

foreach ($tweets as $tweet) {
    echo $tweet->text;
}

测试

测试是用PHPUnit编写的,可以通过composer运行

composer test

为了在PHP 5.2上(Idiorm支持回这个版本的PHP)进行测试,有一个在./test/docker_for_php52中的Docker设置 - 有关更多信息,请参阅其中的readme。

变更日志

1.5.8 - 发布于2022年7月18日

1.5.7 - 发布于2020年4月29日

1.5.6 - 发布于2018年5月31日

1.5.5 - 发布于2018年1月5日

  • 为使用PHP 5.2进行测试添加Docker设置(使用PHPUnit 3.6.12,这是与PHP 5.2兼容的最后版本) [Treffynnon]

1.5.4 - 发布于2018年1月4日

1.5.3 - 发布于2017年3月21日

  • 记录raw_execute()方法,并在查询文档中添加对get_db()的注释 - [Treffynnon]

1.5.2 - 发布于2016年12月14日

1.5.1 - 发布于2014-06-23

1.5.0 - 发布于2014-06-22

1.4.1 - 发布于 2013-12-12

补丁更新以删除损坏的拉取请求 - 可能会影响利用了在 1.4.0 中合并的 "find_many() 现在返回一个以数据库主键为键的关联数组" 变化的 1.4.0 版本的用户。

  • 撤销拉取请求/问题 #133,因为它以先前未预料到的方式破坏了向后兼容性(见 #162#156#133)- 对将此更改合并到 Idiorm 深表歉意 - 关闭 问题 156

1.4.0 - 发布于 2013-09-05

1.3.0 - 发布于2013年01月31日

  • 文档已迁移至idiorm.rtfd.org,并现在使用Sphinx构建
  • 添加对多个数据库连接的支持 - 解决了问题#15 [tag]
  • 添加原生执行功能 - 解决了问题#40 [tag]
  • 添加get_last_statement() - 解决了问题#84 [tag]
  • 添加HAVING子句功能 - 解决了问题#50
  • 添加is_new方法 - 解决了问题#85
  • 向模型实例添加对ArrayAccess的支持,允许通过$model['field']以及$model->field访问属性 - 问题#51
  • 为模型集合添加结果集对象,支持方法链以一次性过滤或应用多个结果 - 问题#51#22
  • 支持 Firebird,具有 ROWSTO 结果集限制以及标识符引用功能 [mapner] - 问题 #98
  • 使用 RETURNING 修复 PostgreSQL 中的最后一个插入 ID - 解决问题 #62#89 [laacz]
  • 执行查询后重置 Idiorm,以允许调用 count() 然后调用 find_many() [fayland] - 问题 #97
  • 将 Composer 修改为使用类映射,以便更好地支持自动加载 [javierd] - 问题 #96
  • 添加到 delete_many 的查询日志 [tag]
  • 修复单独使用 set_expr 时不会触发查询创建的问题 - 解决 问题 #90
  • 在 "_quote_identifier_part" 中转义引号符号 - 解决 问题 #74
  • 修复聚合函数在需要浮点数时始终返回 int 的问题 - 解决 问题 #92
  • 将测试移入 PHPUnit 以统一方法测试和查询生成测试

1.2.3 - 发布于 2012-11-28

1.2.2 - 发布于 2012-11-15

  • 修复输入参数部分按索引,部分关联发送的 bug

1.2.1 - 发布于 2012-11-15

  • 修复由 IdiormStringException 未扩展 Exception 导致的次要 bug

1.2.0 - 发布于 2012-11-14

  • 为通过 packagist 安装设置 composer(j4mie/idiorm)
  • 添加 order_by_expr 方法 [sandermarechal]
  • 添加对不带参数的原始查询的支持 [sandermarechal]
  • 添加对通过将关联数组传递给 set 方法一次设置多个属性的支持 [sandermarechal]
  • 允许将关联数组传递给 configure 方法 [jordanlev]
  • Patch 以允许空的 Paris 模型被保存 ([j4mie/paris]) - 问题 #58
  • 添加 select_manyselect_many_expr - 解决问题 #49#69
  • 添加对 MINAVGMAXSUM 的支持 - 解决 问题 #16
  • 添加 group_by_expr - 解决 问题 #24
  • 添加 set_expr 以允许将数据库表达式设置为 ORM 属性 - 解决问题 #59#43 [brianherbert]
  • 在连接表时防止列名歧义 - 问题 #66 [hellogerard]
  • 添加 delete_many 方法 [CBeerta]
  • 允许取消设置 ORM 参数 [CBeerta]
  • 添加 find_array 以获取关联数组形式的记录 [Surt] - 解决 问题 #17
  • 修复 _log_query 中的错误,其中在原始的 WHERE 子句等地方提供了 ?% - 解决 问题 #57 [ridgerunner]

1.1.1 - 发布于 2011-01-30

  • 修复引用列通配符中的错误。 j4mie/paris#12
  • 小的文档改进

1.1.0 - 发布于 2011-01-24

  • 添加 is_dirty 方法
  • 添加基本的查询缓存
  • 添加 distinct 方法
  • 添加 group_by 方法

1.0.0 - 发布于 2010-12-01

  • 初始发布