sultann/wp-query-builder

WP Query Builder 是一个基于 wpdb 的轻量级且高效的 SQL 查询构建器,适用于 WordPress。它支持复杂的查询生成。

v1.0.2 2020-06-14 15:12 UTC

This package is auto-updated.

Last update: 2024-09-07 17:08:09 UTC


README

WP Query Builder

WP Query Builder 是一个基于 wpdb 的轻量级且高效的 SQL 查询构建器,适用于 WordPress。它支持复杂的查询生成。

Build Status Packagist Packagist GitHub release

安装

WP Query Builder 遵循 PSR-4 自动加载,并可以使用 composer 安装

$ composer require sultann/wp-query-builder

文档 💡

初始化

初始化查询构建器。init 方法接受一个字符串参数,该参数可以在之后根据您的需求进行动作/过滤器操作。如果没有参数。

$query = \PluginEver\QueryBuilder\Query::init();

有参数

$query = \PluginEver\QueryBuilder\Query::init('query_users');

Select

这将构建查询,执行并返回所有用户表中的用户,自动应用表前缀。默认情况下,它会选择所有(*),但您可以定义从查询中选择什么;如果您正在选择所有内容,则可以省略选择语句。

$results = $query->select('*')
                 ->from('users')
                 ->get();

选择特定列

$results = $query->select('ID')
                 ->from('users')
                 ->get();

选择多个列

$results = $query->select('user_login, user_email')
                 ->from('users')
                 ->get();

Where 条件

在接下来的几个示例中,让我们假设有一个较大的数据集,以便查询更有意义。

$results = $query->select('*')
                 ->from('users')
                 ->where('user_email', 'like', '%gmail.com')
                 ->get();

注意,在第一个条件中省略了运算符 ->where('user_url', ''),这使得默认为 =。默认情况下,所有 where 条件都定义为 and 运算符。

不同的 where 运算符

$results = $query->select('*')
                 ->from('users')
                 ->where('user_email', 'like', '%gmail.com')
                 ->orWhere('user_email', 'like', '%yahoo.com')
                 ->get();

还有一些其他内置的 Where 条件可用

  • andWhere()
  • whereIn()
  • whereNotIn()
  • whereNull()
  • whereNotNull()
  • orWhereNull()
  • orWhereNotNull()
  • whereBetween()
  • whereNotBetween()
  • whereDateBetween()
  • whereRaw()

Where 范围

允许您分组条件

$results = $query->select('*')
                 ->from('posts')
                ->where('post_status', 'publish')
                ->where(function($q) 
                {
                    $q->where('menu_order', '>', 21);
                    $q->where('menu_order', '<', 99);
                })
                ->orWhere('post_type', 'page')
                ->get();

Where Between

$results = $query->select('*')
                 ->from('posts')
                 ->whereBetween('menu_order', 1, 20)
                 ->get();

Where Not Between

$results = $query->select('*')
                 ->from('posts')
                 ->whereNotBetween('menu_order', 20, 30)
                 ->get();

Where Date Between

$results = $query->select('*')
                 ->from('posts')
                 ->whereDateBetween('post_date',  '2010-04-22 10:16:21', '2020-05-04')
                 ->get();

连接

默认情况下,所有连接都是 Left Join。可用的连接类型有 'LEFT', 'RIGHT', 'INNER', 'CROSS', 'LEFT OUTER', 'RIGHT OUTER' 连接表

$results = $query->select( '*' )
                ->from( 'posts p' )
                ->join( 'users u', 'u.ID', '=','p.post_author' )
                ->get();

连接范围

允许您分组条件

$results = $query->select( '*' )
                ->from( 'posts p' )
                ->join( 'users u', 'u.ID', '=','p.post_author' )
                ->join('usermeta um', function($q) {
                      $q->where('um.meta_key', 'first_name');
                      $q->where('um.met_value', 'like', '%sultan%');
                  })
                ->get();

还有一些其他内置的连接条件可用

  • leftJoin()
  • rightJoin()
  • innerJoin()
  • outerJoin()

分组

分组数据

$results = $query->select('*')
                 ->from('posts')
                ->group_by('post_status')
                ->get();

Having

按 having 数据分组

$results = $query->select('*')
                 ->from('posts')
                ->group_by('post_status')
                ->having('count(ID)>1')
                ->get();

排序

排序数据

$results = $query->select('*')
                 ->from('posts')
                ->order_by('post_title', 'DESC')
                ->get();

限制数据

限制和偏移

$results = $query->select('*')
                 ->from('posts')
                ->limit(20, 10)
                ->get();

仅限制

$results = $query->select('*')
                 ->from('posts')
                ->limit(20)
                ->get();

偏移作为单独的参数

$results = $query->select('*')
                 ->from('posts')
                ->limit(20)
                ->offset(10)
                ->get();

分页

限制和偏移的快捷方式

$results = $query->select('*')
                 ->from('posts')
                ->page(1, 20)//page number & page size
                ->get();

查找

通过列值查找项目

$results = $query->select('*')
                 ->from('posts')
                 ->find(1, 'ID');

First

从文章表中获取第一条项目

$results = $query->select('*')
                 ->from('posts')
                 ->first();

Last

从文章表中获取最后一条项目

$results = $query->select('*')
                 ->from('posts')
                 ->last();

计数

计算总行数

$results = $query->select('*')
                 ->from('posts')
                 ->count();

toSql

输出查询而不是执行

$results = $query->from('posts as p')
                ->join('users as u',  'p.post_author', 'u.ID')
                ->join('usermeta um', function($q) {
                      $q->where('um.meta_key', 'first_name');
                      $q->where('um.met_value', 'like', '%sultan%');
                  })
                ->toSql();

更新

更新一行

$results = $query->table('posts')
                 ->where('ID', 20)
                 ->update(['post_title' => 'updated']);

删除

删除一行

$results = $query->from('posts')
                ->where('ID', 20)
                ->delete();

搜索

从列中搜索值

$results = $query->from('posts')
                 ->search('Hello Word', array('post_title', 'post_content')) // it will search Hello & World both
                 ->delete();

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件