prepmock / idiorm
一个轻量级的接近零配置的PHP5对象关系映射器和流畅查询构建器
Requires
- php: >=5.2.0
Requires (Dev)
- ext-pdo_sqlite: *
- phpunit/phpunit: ^4.8
This package is auto-updated.
Last update: 2024-09-30 01:43:41 UTC
README
https://j4mie.github.io/idiormandparis/
仅维护模式
从版本1.5.0开始,Idiorm和Paris被认为是功能完整的。虽然它们将继续通过错误修复进行维护,但从这一点开始将不会添加任何新功能。这意味着如果pull请求对API进行了破坏性更改或需要除了库的补丁版本升级之外的其他内容,则它将不会合并。
请勿提交功能请求或API破坏性更改,因为这些请求将被无礼地关闭。
我应该使用Idiorm/Paris吗?
如果你正在启动一个新项目
不建议你在新项目中使用Idiorm或Paris。
我建议你使用Eloquent数据库库,它是从Laravel中提取的,当Taylor编写它时基于Idiorm。这意味着那里有许多相同的思想,但它得到了更积极的维护,并且有更现代的代码风格。
如果你有基于Idiorm或Paris的现有项目
你可以继续使用这两个项目,因为它们将继续接收安全补丁和错误修复。重要的是要注意,如果它们需要的变化会破坏向后兼容性,那么未来的PHP版本可能不会得到支持。
在这种情况下,你可以使用另一个数据库库,如Laravel中的Eloquent(见上文的“如果你正在启动一个新项目”),或者你可以决定分叉Idiorm和/或Paris以对你的修改进行修补。
但是,为什么?
有关此项目的状态进一步信息,请参阅j4mie#360
一个轻量级的接近零配置的对象关系映射器和流畅查询构建器,适用于PHP5及以上。
在PHP 5.2.0+上进行了测试 - 可能可以在PDO和正确的数据库驱动程序上运行较早的版本。
在BSD许可证下发布。
另请参阅:基于Idiorm构建的Paris,一个Active Record实现。
特性
- 使简单的查询和简单的CRUD操作变得完全无痛苦。
- 当需要更复杂的SQL时,会避开。
- 基于PDO构建。
- 在整个过程中使用预处理语句,以防止SQL注入攻击。
- 无需模型类,无需XML配置和无需代码生成:只需提供一个连接字符串即可开箱即用。
- 由一个名为
ORM
的主要类组成。其他类以Idiorm
为前缀。最小化全局命名空间污染。 - 数据库无关。目前支持SQLite、MySQL、Firebird和PostgreSQL。可能支持其他数据库,请尝试一下!
- 支持具有方法链的模型集合,可以一次性过滤或应用操作到多个结果。
- 支持多个连接
- PSR-1合规方法(任何方法都可以用camelCase调用,而不是下划线,例如
find_many()
变为findMany()
) - 你需要PHP 5.3+。
文档
文档托管在Read the Docs上:idiorm.rtfd.org
构建文档
您需要安装 Sphinx,然后在文档文件夹中运行
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)上进行测试,有一个 Docker 配置在 ./test/docker_for_php52
中 - 更多信息请参阅那里的 readme。
变更日志
1.5.8 - 发布于 2022-07-18
- 更新以支持 PHP 8.1 [edlerd 和 aaronpk] - 问题 #370 和 问题 #372
- GitHub actions 用于执行单元测试/CI [Treffynnon 和 yan12125]
1.5.7 - 发布于 2020-04-29
- 修复调用 join() 时的参数顺序 [CatalinFrancu] - 问题 #357
1.5.6 - 发布于 2018-05-31
- 在 reset_db() 上将
null
分配给self::$_db
以确保 PDO 关闭连接 [bleakgadfly] - 问题 #338
1.5.5 - 发布于 2018-01-05
- 为使用 PHP 5.2 进行测试添加 Docker 配置(使用 PHPUnit 3.6.12,这是最后一个与 PHP 5.2 兼容的版本) [Treffynnon]
1.5.4 - 发布于 2018-01-04
- 当返回缓存结果时重置 Idiorm 状态 [fayland (和 Treffynnon)] - 问题 #319
- 修复 travis 构建(添加 7.0 和 7.1)并记录对较新 PHP 版本的支持 [Treffynnon]
- 为 selectMany() 修复 PHPDoc 注释 [kawausokun] - 问题 #325
- 将 pdo_sqlite 添加到 composer require-dev 依赖项 [qyanu] - 问题 #328
1.5.3 - 发布于 2017-03-21
- 记录
raw_execute()
方法,并在查询文档中添加对get_db()
的注释 - [Treffynnon]
1.5.2 - 发布于 2016-12-14
- 修复自增复合键插入 [lrlopez] - 问题 #233 和 拉取 #235
- 为魔法方法添加 @method 标签 [stellis] - 问题 #237
- 确保当提供 null 或空字符串时,is_dirty() 返回正确结果 [tentwofour] - 问题 #268
- 将 Code Climate 徽章添加到 readme 文件中 [e3betht] - 问题 #260
- 导航中存在错别字 [leongersen] - 问题 #257
- 支持命名占位符记录和测试 [m92o] - 问题 #223
having_id_is()
引用了未定义的变量$value
[Treffynnon] - 问题 #224- 修复文档 -
where_any_is()
的 ORM 查询输出 [uovidiu] - 问题 #306 - 修复代码风格,防止嵌套循环使用相同的变量名称 [mkkeck] - 问题 #301
- 说明内置查询日志器的不足 [Treffynnon] - 问题 #307
- 将 phpunit 添加到开发依赖项,添加
composer test
脚本快捷方式和修复测试引导中的 PDO 模拟 [Treffynnon] - 针对多个原始 WHERE 子句的新测试 [Treffynnon] - 问题 #236
- 从 travis-ci 容器中删除 PHP 5.2 以进行测试(注意 Idiorm 尽管如此仍然支持 PHP 5.2) [Treffynnon]
1.5.1 - 发布于 2014-06-23
1.5.0 - 发布于 2014-06-22
- 支持多个 OR 条件 [lrlopez] - 问题 #201
where_id_in()
用于通过主键选择多个记录 [lrlopez] - 问题 #202- 添加复合主键支持 [lrlopez] - 问题 #171
- 将原始 JOIN 源添加到查询中 [moiseevigor] - 问题 #163
- offsetExists() 对于 null 值应返回 true,解决了 #181 [cainmi] - 问题 #214
- 自定义缓存回调函数 [peter-mw] - 问题 #216
- 在更新/删除时限制 null 主键,解决了 #203 [cainmi] - 问题 #205
- 确保类型正确处理参数 [charsleysa] & [SneakyBobito] - 问题 #206 & 问题 #208
- 减少聚合函数上的类型转换,以允许字符 [herroffizier] - 问题 #150
- 防止无效的方法调用引发无限递归 [michaelward82] - 问题 #152
- 添加查询日志的时间 - 将查询时间参数添加到外部日志回调函数 [AgelxNash] - 问题 #180
- 修改数据库数组访问以确保其始终正确设置 [falmp] - 问题 #159
- 允许取消设置数据库 (
ORM::set_db(null)
) 以使测试再次工作 [borrel] - 问题 #160 - 纠正 问题 #176: 在构建选择之前确保数据库设置 [kendru] - 问题 #197
- 将 HHVM 添加到 travis-ci 构建矩阵 [ptarjan] - 问题 #168
- 改进 where 语句优先级文档 [thomasahle] - 问题 #190
- 改进测试检查 [charsleysa] - 问题 #173
1.4.1 - 发布于 2013-12-12
修复更新以移除一个损坏的拉取请求 - 可能会影响利用 1.4.0 中合并的 "find_many()
现在返回一个关联数组,其键为数据库主键" 更改的 1.4.0 用户。
1.4.0 - 发布于 2013-09-05
find_many()
现在返回一个关联数组,其键为数据库主键 [Surt] - 问题 #133- 对
set()
和set_expr()
的调用返回$this
,允许它们进行链式调用 [Surt] - 向 Idiorm 添加符合 PSR-1 camelCase 方法调用的规范(PHP 5.3+ 需要) [crhayes] - 问题 #108
- 添加静态方法
get_config()
以访问当前配置 [javierd] - 问题 #141 - 添加日志回调功能 [lalop] - 问题 #130
- 添加对MS SQL
TOP
限制样式的支持(自动用于PDO驱动程序:sqlsrv、dblib和mssql) [numkem] - 问题 #116 - 在
WHERE
子句中使用表别名 [vicvicvic] - 问题 #140 - 在调用聚合函数时忽略结果列 [tassoevan] - 问题 #120
- 改进文档 [bruston] - 问题 #111
- 改进
get_db()
的 PHPDoc [mailopl] - 问题 #106 - 改进文档 [sjparsons] - 问题 #103
- 使 tests/bootstrap.php 与 HHVM 兼容 [JoelMarcey] - 问题 #143
- 修复 docblock [ulrikjohansson] - 问题 #147
- 修复查询文档中不正确的变量名 [fridde] - 问题 #146
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数据库,使用
ROWS
和TO
限制结果集,并添加标识符引号功能 [mapner] - 问题#98 - 使用RETURNING修复PostgreSQL的最后插入ID - 解决问题#62和#89 [laacz]
- 在执行查询后重置Idiorm,以便调用
count()
然后调用find_many()
[fayland] - 问题#97 - 将Composer更改为使用classmap,以更好地支持自动加载 [javierd] - 问题#96
- 向
delete_many
添加查询日志 [tag] - 修复仅使用
set_expr
时不会触发查询创建的问题 - 解决问题#90 - 在"_quote_identifier_part"中转义引号符号 - 解决问题#74
- 修复聚合函数总是返回
int
,而有时需要float
的问题 - 解决问题#92 - 将测试移入PHPUnit以统一方法测试和查询生成测试
1.2.3 - 发布于2012年11月28日
- 修复问题#78 - 移除PHP 5.3静态调用
1.2.2 - 发布于2012年11月15日
- 修复输入参数部分索引、部分关联的问题
1.2.1 - 发布于2012年11月15日
- 修复由IdiormStringException未扩展Exception引起的微小错误
1.2.0 - 发布于2012年11月14日
- 为通过packagist安装设置composer(j4mie/idiorm)
- 添加
order_by_expr
方法 [sandermarechal] - 添加对无参数的原始查询的支持 [sandermarechal]
- 添加通过向
set
方法传递关联数组来同时设置多个属性的支持 [sandermarechal] - 允许向
configure
方法传递关联数组 [jordanlev] - 允许空的Paris模型被保存 ([j4mie/paris]) - 问题#58
- 添加
select_many
和select_many_expr
- 解决问题#49和#69 - 添加对
MIN
、AVG
、MAX
和SUM
的支持 - 解决问题#16 - 添加
group_by_expr
- 解决问题#24 - 添加
set_expr
以允许将数据库表达式设置为ORM属性 - 解决问题#59和#43 [brianherbert] - 防止连接表时出现模糊的列名 - 问题#66 [hellogerard]
- 添加
delete_many
方法 [CBeerta] - 允许取消设置 ORM 参数 [CBeerta]
- 添加
find_array
以获取记录为关联数组 [Surt] - 关闭 问题 #17 - 修复在原始 where 语句等中提供
?
和%
的_log_query
中的错误 - 关闭 问题 #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
- 初始版本