tflori / orm
轻量级对象关系映射器
v1.9.1
2023-11-05 11:49 UTC
Requires
- php: ^5.6 || ^7.0 || ^8.0
- ext-json: *
- ext-mbstring: *
- ext-pdo: *
Requires (Dev)
Suggests
- mockery/mockery: ^1.1
- dev-master
- v1.9.1
- v1.9.0
- v1.9.0-rc.10
- v1.9.0-rc.9
- v1.9.0-rc.8
- v1.9.0-rc.7
- v1.9.0-rc.6
- v1.9.0-rc.5
- v1.9.0-rc.4
- v1.9.0-rc.3
- v1.9.0-rc.2
- v1.9.0-rc.1
- v1.8.0
- v1.8.0-rc.2
- v1.8.0-rc.1
- v1.7.0
- v1.6.0
- v1.5.4
- v1.5.3
- v1.5.2
- v1.5.1
- 1.5.0
- v1.5.0-beta.1
- v1.4.0
- v1.3.0
- v1.2.1
- v1.2.0
- v1.2.0-beta2
- v1.2.0-beta1
- v1.2.0-alpha1
- v1.1.1
- v1.1.0
- v1.1.0-beta1
- v1.0.1
- v1.0.0
- v1.0.0-beta2
- v1.0.0-beta1
- v1.0.0-alpha4
- v1.0.0-alpha3
- v1.0.0-alpha2
- v1.0.0-alpha1
- dev-dependabot/github_actions/dot-github/workflows/actions/download-artifact-4.1.7
- dev-github-actions
- dev-f/parent-children-relation
- dev-f/eager-loading
- dev-f/transaction-handling
- dev-mocks-solution1
This package is auto-updated.
Last update: 2024-09-03 22:11:29 UTC
README
TL;DR 别的都不好,我们能做得更好。
为什么还要创建另一个ORM?PHP中已经没有足够的ORM实现了吗?
是的,实现有很多
- doctrine/orm
- 重量级:包含你不需要的所有内容的8.8MB,6个直接依赖及其自己的依赖
- 注释使它难以阅读
- 在多表连接时,查询量很大或查询速度非常慢
- propel/propel
- 仍然不稳定,2.0-dev
- 甚至比doctrine更重
- 需要大量配置
- j4mie/idiorim 和 j4mie/paris
- 使用了很多静态方法,难以测试
- 与现有的依赖注入模型不兼容
- 最后更新2年前
- 所有内容都在一个文件中
- ...
此实现将具有以下功能
- 无需配置
- 当然,有一些配置是必要的(例如,如何连接到您的数据库?)
- 当然,这只有在您按照我们的想法设置数据库时才可行。如果不是这样,您只需设置系统的规则和命名约定。
- 易于使用
- 轻量级源代码
- 快速
如何实现这些功能?Doctrine的主要目标似乎是抽象化一切 - 最终您应该能够替换您应用背后的整个DBMS,并从postgresql切换到sqlite。这需要大量的源代码。这也需要一些额外的周期来使这些抽象化工作。
此库将仅生成任何SQL数据库都应该理解的ANSI-SQL。其他查询需要手动编写。这有两个原因
- 您可以编写更快、更高效的查询
- 我们不需要编写大量的抽象(更多代码;更多错误)
此库不会捕获开发者可能犯的任何错误。它的目标是成为存储数据的助手,而不是替换您的数据库以及您如何使用此数据库的知识。您可能会犯很多错误 - 比没有此库时少,但仍然很多。当您犯了一个没有被捕获的错误(通常我们只会捕获会导致致命错误的错误)时,您将得到一个PDOException
。
设置
通过composer安装,配置它,然后使用它。
composer require tflori/orm
<?php $entityManager = new ORM\EntityManager([ ORM\EntityManager::OPT_CONNECTION => ['pgsql', 'mydb', 'postgres'] ]); $user = $entityManager->fetch(User::class, 1); echo $user->username;
阅读文档以获取更多信息。
已知问题
复合主键
#52 复合主键需要SQLite >= 3.15(或另一个数据库)才能在插入后同步工作。所使用的语法在SQLite 3.15中添加。
贡献
请遵循PSR-2风格指南,并使用此命令更新API参考文档
$ docker run --rm --user $(id -u) -v $(pwd):/data -v $(pwd)/docs/_reference:/opt/phpdoc/data/templates/_reference iras/phpdoc2:2 phpdoc -c phpdoc.xml
在创建拉取请求之前,请确保单元测试是绿色的,并且覆盖率保持不变
$ docker run --rm --user $(id -u) -v $(pwd):/app -w /app iras/php7 vendor/bin/phpunit ### with coverage: $ docker run --rm --user $(id -u) -v $(pwd):/app -w /app iras/php7 php -dzend_extension=xdebug.so vendor/bin/phpunit --coverage-text