sultann / wp-query-builder
WP Query Builder 是一个基于 wpdb 的轻量级且高效的 SQL 查询构建器,适用于 WordPress。它支持复杂的查询生成。
Requires
- php: >=5.4
This package is auto-updated.
Last update: 2024-09-07 17:08:09 UTC
README
WP Query Builder
WP Query Builder 是一个基于 wpdb 的轻量级且高效的 SQL 查询构建器,适用于 WordPress。它支持复杂的查询生成。
安装
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)。有关更多信息,请参阅 许可证文件。