abdulelahragih/querybuilder

快速、轻量级且简单的SQL查询构建器,除了PDO之外不依赖任何第三方库以安全方式执行查询。语法灵感来自Laravel查询构建器。

1.0.17 2024-01-22 18:37 UTC

README

快速、轻量级、简单的SQL查询构建器,除了PDO之外不依赖任何第三方库以安全方式执行查询。语法灵感来自Laravel查询构建器。

重要

请勿在生产环境中使用,因为它仍在beta测试阶段,许多公共API可能会更改。

功能

  • 内部绑定管理器,所以您不必担心绑定您的值。
  • 支持在Where和Join子句中添加多个和嵌套条件。
  • 支持分页。

安装

推荐通过Composer安装QueryBuilder。

composer require abdulelahragih/querybuilder

基本用法

要开始使用它,您必须首先创建QueryBuilder的一个实例

$pdo = # your pdo connection
$qb = new \Abdulelahragih\QueryBuilder\QueryBuilder($pdo)
# Now you can start using it 
$result = $qb->table('users')
   ->select('id', 'username', 'phone_number', 'gender')
   ->where('role_id', '=', 1)
   ->join('images', 'images.user_id', '=', 'users.id')
   ->get();

带分页的查询

您可以使用paginate方法或simplePaginate方法。

paginate将返回一个包含项目总数、当前页、每页项目数、总页数以及下一页和上一页数量的LengthAwarePaginator实例。

$paginator = $qb->table('users')
   ->select('id', 'username', 'phone_number', 'gender')
   ->where('role_id', '=', 1)
   ->paginate($page, $limit);

simplePaginate将返回一个包含当前页、每页项目数和下一页、上一页数量的Paginator实例。

$paginator = $qb->table('users')
   ->select('id', 'username', 'phone_number', 'gender')
   ->where('role_id', '=', 1)
   ->simplePaginate($page, $limit);

嵌套Where

您可以通过将闭包传递给where方法向Where子句添加嵌套条件。

$result = $qb->table('users')
   ->select('id', 'username', 'phone_number', 'gender')
   ->where(function ($builder) {
       $builder->where('role_id', '=', 1)
           ->orWhere('role_id', '=', 2); 
   })
   ->get();

嵌套Join

您可以通过将闭包传递给join方法向Join子句添加嵌套条件。

$result = $qb->table('users')
    ->join('images', function (JoinClauseBuilder $builder) {
        $builder->on('images.user_id', '=', 'users.id');
        // you can use all where variants here
        $builder->where('images.user_id', '=', 1);
    })
    ->get();

待办事项

  • 支持更新、删除、插入
  • 支持创建模式
  • 添加pluck方法
  • 在Where和Join子句内添加对子查询的支持
  • 实现一个收集类,使其成为get()的返回类型
  • 添加一个returning方法到查询中,允许您返回插入/更新的行(或行)的列
  • 添加对不同类型数据库的支持并重构代码,使其易于实现
  • 添加对事务的支持

贡献

欢迎任何有助于改进此项目的贡献