jpi / query
简化数据库查询的库
Requires
- php: ^8.0
- jpi/database: ^2.0
- jpi/utils: ^1.0
Requires (Dev)
- jpi/codestyles: ^1.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-06 23:40:57 UTC
README
自行承担风险!
我建议不要在生产应用中使用此库...但在您自己的个人/演示/实验项目中自由使用。
这是一个简单的库,可以使数据库查询更加容易,它作为应用程序和数据库之间的中间人。
这个库非常简单(KISS),除了PHP中的类型错误外,没有验证,它将假设您正确地使用了它。所以请确保在使用这些查询中的用户输入时添加自己的验证。
依赖关系
- PHP 8.0+
- Composer
- PHP PDO
- MySQL 5+
- jpi/database v2
安装
使用 Composer
$ composer require jpi/query
使用方法
要创建一个实例,您需要一个 \JPI\Database 实例(如果您不熟悉,可以在这里阅读有关信息 这里),这是第一个参数,以及数据库表名作为第二个参数。只要是为同一数据库,就可以多次使用相同的实例。
$queryBuilder = new \JPI\Database\Query\Builder($database, $table);
操作方法
这些是调用以结束的 select、count: int、insert($values array): int|null、update($values array): int 和 delete: int 方法,所有这些都非常直观。
构建方法
这些都是流式方法,因此可以将它们一起链接。
table(string $table, string|null $alias):如果您想更改到另一个表或在创建实例时没有设置column(string $column, string|null $alias):如果没有设置,将选择所有列where:- 您可以使用第一个参数传入整个子句
- 或者您可以单独传入列、表达式和值
orderBy(string $column, bool $ascDirection = true)limit(int $limit, int|null $page)page(int):用于更改偏移量,仅在设置limit时使用
示例
假设已创建一个 \JPI\Database\Query\Builder 实例用于 users 数据库表,并将其设置为名为 $queryBuilder 的变量。
选择
根据您如何使用它,它有4种返回类型
- 如果您设置了
limit为1,则将返回一个键(列)值对的关联数组,如果没有找到,则返回null - 如果分页
\JPI\Database\Query\PaginatedResult - 否则
\JPI\Database\Query\Result
PaginatedResult 和 Result 的工作方式就像普通数组一样,只是有一些额外的方法,有关详细信息,请参阅 https://github.com/jahidulpabelislam/utils?tab=readme-ov-file#collection
// SELECT * FROM users; $collection = $queryBuilder->select(); /** $collection = [ [ "id" => 1, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password123", ... ], [ "id" => 2, "first_name" => "Test", "last_name" => "Example", "email" => "test@example.com", "password" => "password123", ... ], ... ]; */ // SELECT first_name, last_name FROM users; $collection = $queryBuilder ->column("first_name") ->column("last_name") ->select(); /** $collection = [ [ "first_name" => "Jahidul", "last_name" => "Islam", ], [ "first_name" => "Test", "last_name" => "Example", ], ... ]; */ // SELECT * FROM users WHERE status = "active"; $collection = $queryBuilder->where("status", "=", "active")->select(); /** $collection = [ [ "id" => 1, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password123", "status" => "active", ... ], [ "id" => 3, "first_name" => "Test", "last_name" => "Example", "email" => "test@example.com", "password" => "password123", "status" => "active", ... ], ... ]; */ // SELECT * FROM users WHERE status = "active" ORDER BY last_name ASC; $collection = $queryBuilder->where("status", "=", "active")->orderBy("last_name")->select(); /** $collection = [ [ "id" => 3, "first_name" => "Test", "last_name" => "Example", "email" => "test@example.com", "password" => "password123", "status" => "active", ... ], [ "id" => 1, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password123", "status" => "active", ... ], ... ]; */ // SELECT * FROM users WHERE status = "active" ORDER BY first_name ASC LIMIT 10 OFFSET 20; $collection = $queryBuilder->where("status", "=", "active")->orderBy("first_name")->limit(10, 3)->select(); /** $collection = [ [ "id" => 31, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password123", "status" => "active", ... ], [ "id" => 30, "first_name" => "Test", "last_name" => "Example", "email" => "test@example.com", "password" => "password123", "status" => "active", ... ], ... ]; */ // SELECT * FROM users WHERE first_name LIKE "%jahidul%" LIMIT 1; $row = $queryBuilder->where("first_name", "LIKE", "%jahidul%")->limit(1)->select(); /** $row = [ "id" => 1, "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password", ... ]; */
计数
顾名思义,此方法将仅返回整数计数。
出于明显的原因,仅支持 table 和 where 构建方法。
// SELECT COUNT(*) as count FROM users; $count = $queryBuilder->count(); // $count = 10; // SELECT COUNT(*) as count FROM users WHERE status = "active"; $count = $queryBuilder->where("status", "=", "active")->count(); // $count = 5;
插入
此方法将仅返回创建的行的ID,如果失败则返回 null。
仅支持此操作的 table 构建方法。
// INSERT INTO users SET first_name= "Jahidul", last_name= "Islam", email = "jahidul@jahidulpabelislam.com", password = "password"; $id = $queryBuilder->insert([ "first_name" => "Jahidul", "last_name" => "Islam", "email" => "jahidul@jahidulpabelislam.com", "password" => "password", ]); // $id = 1;
更新
此方法将返回查询更新的行数。
column 和 page 构建方法不支持此操作。
// UPDATE users SET status = "inactive"; $numberOrRowsUpdated = $queryBuilder->update([ "status" => "inactive", ]); // $numberOrRowsUpdated = 10; // UPDATE users SET first_name = "Pabel" WHERE id = 1; $numberOrRowsUpdated = $queryBuilder ->where("id", "=", 1) ->update([ "first_name" => "Pabel", ]) ; // $numberOrRowsUpdated = 1;
删除
此方法将返回查询删除的行数。
column 和 page 构建方法不支持此操作。
// DELETE FROM users; $numberOrRowsDeleted = $queryBuilder->delete(); // $numberOrRowsDeleted = 10; // DELETE FROM users WHERE id = 1; $numberOrRowsDeleted = $queryBuilder->where("id", "=", 1)->delete(); // $numberOrRowsDeleted = 1;
支持
如果您觉得这个库有趣或有用,请传播这个库的消息:在您的社交平台上分享,在GitHub上给它加星等。
如果您发现任何问题或有任何功能请求,可以打开问题或在me@jahidulpabelislam.com给我发邮件 😏。
作者
许可
本模块遵循通用公共许可证 - 详细信息请参阅许可文件。