phphleb/xdorm

此包已被废弃且不再维护。未建议替代包。

HLEB 微型框架的 XD ORM

dev-master 2022-12-22 13:40 UTC

This package is auto-updated.

Last update: 2024-03-24 11:09:08 UTC


README

HLEB 微型框架的 XD ORM

如果您需要安装框架,请使用以下链接: github.com/phphleb/hleb

HLEB

HLEB 微型框架的一个显著特点是代码的极简性和工作速度。选择此框架可以让您以最小的时间成本启动一个完整的产品,并吸引文档;它简单、直观且快速。同时,它解决了典型的任务,如路由、将动作转移到控制器、模型支持,以及基本的 MVC 实现。这是快速启动应用程序所需的最小元素。

XD ORM

实际上,XD ORM 是 PHP PDO 上的一个外壳,专门为 HLEB 框架设计。它简单且符合微型框架的通用目的。

XD ORM 不包含在框架的原始配置中,因此必须将其从 github.com/phphleb/xdorm 存储库的 vendor/phphleb 库文件夹复制过来,或使用 Composer 安装。

$ composer require phphleb/xdorm

连接到项目

// File /app/Optional/MainConnect.php
... [
"XdORM\XD" => "vendor/phphleb/xdorm/XD.php"
] ...

您可以为所选的 DBMS(任何受 PDO 支持的)创建基本 SQL 风格的查询。在此 ORM 中实现的主要任务是使查询字符串成为安全的查询字符串。

如果您了解 SQL 语法,可以直接开始编写模型。此语法对于命令的解析如下

use XdORM\XD;

XD::any(); // 'ANY'
XD::any_words(); // 'ANY_WORDS'
XD::anyWords(); // 'ANY WORDS'
XD::any()->words(); // 'ANY WORDS'

对于表名,只需将它们传递为一个数组即可

$query = XD::select(['id', 'name', 'email'])->from(['users']);
 // SELECT `id`, `name`, `email` FROM `users`;

值按原样插入,但所有字符串值(除 SQL 语句和特殊字符外)都将使用内置的 PDO 进行检查

$query = XD::select('*')->from(['users'])->where(['name'], '!=', "d'Artanyan")->and(['id'], '=', 1)->limit(1);
// SELECT * FROM `users` WHERE `name` != 'd\'Artanyan' AND `id` = 1 LIMIT 1;

$query = XD::select('*')->from(['users'])->where(['id'])->in('(', 15, ',', 43, ',', 60, ',', 71, ')');
// SELECT * FROM `users` WHERE `id` IN ( 15, 43, 60, 71);

要传递值数组,有一个特殊的方法 setList()

$ids = [15, 43, 60, 71];
$query = XD::select('*')->from(['users'])->where(['id'])->in('(', XD::setList($ids), ',', 156, ',', 200, ')');
// SELECT * FROM `users` WHERE `id` IN ( 15, 43, 60, 71, 156, 200);

查询部分的连接可以在返回的 XD 对象之间以任何顺序进行

$select_user_id = XD::select(['id'])->from(['users'])->where(['id'], '=', 15);
$query = XD::select('*')->from(['tasks'])->where(['user_id'], '=', '(', $select_user_id, ')');

或者这样

$q = XD::select('*')->from(['users']);

$query = $q->limit(100);
// SELECT * FROM `users` LIMIT 100;

// or (but not the "and", as there will be a concatenation with the previous action)

$query = $q->leftJoin(['tasks'])->on(['users.id'], '=', ['tasks.user_id']);
// SELECT * FROM `users` LEFT JOIN `tasks` ON `users`.`id` = `tasks`.`user_id`;

现在您需要运行此查询并获取结果(如果需要的话)。对于返回数据的查询,有以下方法存在

$result = $query->getSelectOne(); // Getting one row in the named array.
$result = $query->getSelectValue(); // Getting one value.
$result = $query->getSelect(); // Returns an array of rows as named arrays.
$result = $query->getSelectAll(); // Returns an array of objects whose values can be obtained by the fields of the objects.
$result = XD::selectCount_('(*)')->from(['users'])->getSelectValue();
// SELECT COUNT(*) FROM `users`;

对于所有其他不返回结果集的查询,只需添加 run() 执行查询即可。

XD::update(['users'])->set(['name'], '=', 'admin')->where(['id'], '=', 1)->run();

XD::dropTable(['users'])->run();

在异常情况下,可以使用返回 PDOStatement 对象的 execute() 方法来查询,然后根据 PDO 文档对后者进行进一步操作。

使用多个连接

所需的 "dbase.config.php" 文件最初不存在,必须从 "database" 目录中的 "database/default.dbase.config.php" 文件复制过来。如果 XD ORM 未连接到 HLEB 框架,则可以使用常量 XDDB_PATH_TO_CONFIG 指定配置文件的完整路径(文件模板位于“templates”文件夹中)。

配置文件可能包含各种数据库连接的变体;默认情况下,使用 HLEB_TYPE_DB 常量指定的连接名称。要执行配置文件中指定的其他数据库的查询,必须在查询执行方法中指定其名称。例如:run('postgresql.first')、getSelectOne('postgresql.second') 或 getSelect('mysql.name')。查询将以指定的设置执行。