jpi/query

简化数据库查询的库

v2.1.0 2024-06-01 10:13 UTC

This package is auto-updated.

Last update: 2024-09-06 23:40:57 UTC


README

自行承担风险!

我建议不要在生产应用中使用此库...但在您自己的个人/演示/实验项目中自由使用。

CodeFactor Latest Stable Version Total Downloads Latest Unstable Version License GitHub last commit (branch)

这是一个简单的库,可以使数据库查询更加容易,它作为应用程序和数据库之间的中间人。

这个库非常简单(KISS),除了PHP中的类型错误外,没有验证,它将假设您正确地使用了它。所以请确保在使用这些查询中的用户输入时添加自己的验证。

依赖关系

安装

使用 Composer

$ composer require jpi/query 

使用方法

要创建一个实例,您需要一个 \JPI\Database 实例(如果您不熟悉,可以在这里阅读有关信息 这里),这是第一个参数,以及数据库表名作为第二个参数。只要是为同一数据库,就可以多次使用相同的实例。

$queryBuilder = new \JPI\Database\Query\Builder($database, $table);

操作方法

这些是调用以结束的 selectcount: intinsert($values array): int|nullupdate($values array): intdelete: 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种返回类型

  • 如果您设置了 limit1,则将返回一个键(列)值对的关联数组,如果没有找到,则返回 null
  • 如果分页 \JPI\Database\Query\PaginatedResult
  • 否则 \JPI\Database\Query\Result

PaginatedResultResult 的工作方式就像普通数组一样,只是有一些额外的方法,有关详细信息,请参阅 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",
    ...
];
*/

计数

顾名思义,此方法将仅返回整数计数。

出于明显的原因,仅支持 tablewhere 构建方法。

// 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;

更新

此方法将返回查询更新的行数。

columnpage 构建方法不支持此操作。

// 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;

删除

此方法将返回查询删除的行数。

columnpage 构建方法不支持此操作。

// 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给我发邮件 😏。

作者

许可

本模块遵循通用公共许可证 - 详细信息请参阅许可文件