$builder->like()
这个方法使您能够生成类似 LIKE 子句,做搜索时非常有用。
注解
所有传入数据将被自动转义。
注解
like* 通过传第五个参数传递值 true 可以强制在
执行查询时不区分大小写。这项特性可用性跟平台相关,否则将强制值转为小写,
例如 WHERE LOWER(column) LIKE '%search%',让其生效可能需要
在制作索引时用 LOWER(column) 而不是 column 。
简单 key/value 方式:
$builder->like('title', 'match');
// 生成: WHERE `title` LIKE '%match%' ESCAPE '!'
如果你多次调用该方法,那么多个 WHERE 条件将会使用 AND 连接起来:
$builder->like('title', 'match');
$builder->like('body', 'match');
// WHERE `title` LIKE '%match%' ESCAPE '!' AND `body` LIKE '%match% ESCAPE '!'
如果你想控制通配符通配符(%)的位置,可以指定第三个参数,
可用选项:’before’,’after’ 和 ‘both’ (默认) 。
$builder->like('title', 'match', 'before'); // 生成: WHERE `title` LIKE '%match' ESCAPE '!'
$builder->like('title', 'match', 'after'); // 生成: WHERE `title` LIKE 'match%' ESCAPE '!'
$builder->like('title', 'match', 'both'); // 生成: WHERE `title` LIKE '%match%' ESCAPE '!'
关联数组方式:
$array = ['title' => $match, 'page1' => $match, 'page2' => $match];
$builder->like($array);
// WHERE `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
$builder->orLike()
这个方法和上面的方法一样,只是多个 WHERE 条件之间使用 OR 进行连接:
$builder->like('title', 'match'); $builder->orLike('body', $match);
// WHERE `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
$builder->notLike()
这个方法和 like() 方法一样,只是生成 NOT LIKE 子句:
$builder->notLike('title', 'match'); // WHERE `title` NOT LIKE '%match% ESCAPE '!'
$builder->orNotLike()
这个方法和 notLike() 方法一样,只是多个条件之间使用 OR 连接:
$builder->like('title', 'match');
$builder->orNotLike('body', 'match');
// WHERE `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'
$builder->groupBy()
该方法用于生成 GROUP BY 子句:
$builder->groupBy("title"); // 生成: GROUP BY title
你也可以通过一个数组传入多个值:
$builder->groupBy(["title", "date"]); // 生成: GROUP BY title, date
$builder->distinct()
该方法用于向查询中添加 “DISTINCT” 关键字
$builder->distinct();
$builder->get(); // 生成: SELECT DISTINCT * FROM mytable
$builder->having()
该方法用于生成 HAVING 子句,有下面两种不同的语法。
有两种可用语法,单参数或双参数:
$builder->having('user_id = 45'); // 生成: HAVING user_id = 45
$builder->having('user_id', 45); // 生成: HAVING user_id = 45
你还可以传递一个包含多个值的数组:
$builder->having(['title =' => 'My Title', 'id $id]);
// 生成: HAVING title = 'My Title', id < 45
如果你正在使用 CodeIgniter 为其转义查询的数据库,
你可以传第三个可选参数来防止转义内容,设为 FALSE 。
$builder->having('user_id', 45); // 生成: HAVING `user_id` = 45 in some databases such as MySQL
$builder->having('user_id', 45, FALSE); // 生成: HAVING user_id = 45
$builder->orHaving()
该方法和 having() 方法一样,只是多个条件之间使用 “OR” 进行连接。
$builder->havingIn()
生成一个 HAVING 字段的 IN (‘item’, ‘item’) SQL 查询子句,
多个条件之间使用 AND 连接
$groups = [1, 2, 3];
$builder->havingIn('group_id', $groups);
// 生成: HAVING group_id IN (1, 2, 3)
你可以用子查询代替数组。
$builder->havingIn('id', function(BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// 生成: HAVING "id" IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->orHavingIn()
生成一个 HAVING 字段的 IN (‘item’, ‘item’) SQL 查询子句,
多个条件之间使用 OR 连接
$groups = [1, 2, 3];
$builder->orHavingIn('group_id', $groups);
// 生成: OR group_id IN (1, 2, 3)
你可以用子查询代替数组。
$builder->orHavingIn('id', function(BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// 生成: OR "id" IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->havingNotIn()
生成一个 HAVING 字段的 NOT IN (‘item’, ‘item’) SQL 查询子句,
多个条件之间使用 AND 连接
$groups = [1, 2, 3];
$builder->havingNotIn('group_id', $groups);
// 生成: HAVING group_id NOT IN (1, 2, 3)
你可以用子查询代替数组。
$builder->havingNotIn('id', function(BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// 生成: HAVING "id" NOT IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->orHavingNotIn()
生成一个 HAVING 字段的 NOT IN (‘item’, ‘item’) SQL 查询子句,
多个条件之间使用 OR 连接
$groups = [1, 2, 3];
$builder->havingNotIn('group_id', $groups);
// 生成: OR group_id NOT IN (1, 2, 3)
你可以用子查询代替数组。
$builder->orHavingNotIn('id', function(BaseBuilder $builder) {
return $builder->select('user_id')->from('users_jobs')->where('group_id', 3);
});
// 生成: OR "id" NOT IN (SELECT "user_id" FROM "users_jobs" WHERE "group_id" = 3)
$builder->havingLike()
该方法让你能够在 HAVING 查询部分生成 LIKE 子句,常用于搜索。
注解
该方法所有传入参数会被自动转义。
注解
havingLike* 通过传第五个参数传递值 true 可以强制在
执行查询时不区分大小写。这项特性可用性跟平台相关,否则将强制值转为小写,
例如 HAVING LOWER(column) LIKE '%search%',让其生效可能需要
在制作索引时用 LOWER(column) 而不是 column 。
简单 key/value 方式:
$builder->havingLike('title', 'match');
// 生成: HAVING `title` LIKE '%match%' ESCAPE '!'
如果你多次调用该方法,那么多个 WHERE 条件将会使用 AND 连接起来:
$builder->havingLike('title', 'match');
$builder->havingLike('body', 'match');
// HAVING `title` LIKE '%match%' ESCAPE '!' AND `body` LIKE '%match% ESCAPE '!'
如果你想控制通配符通配符(%)的位置,可以指定第三个参数,
可用选项:’before’,’after’ 和 ‘both’ (默认) 。
$builder->havingLike('title', 'match', 'before'); // 生成: HAVING `title` LIKE '%match' ESCAPE '!'
$builder->havingLike('title', 'match', 'after'); // 生成: HAVING `title` LIKE 'match%' ESCAPE '!'
$builder->havingLike('title', 'match', 'both'); // 生成: HAVING `title` LIKE '%match%' ESCAPE '!'
关联数组方式:
$array = ['title' => $match, 'page1' => $match, 'page2' => $match];
$builder->havingLike($array);
// HAVING `title` LIKE '%match%' ESCAPE '!' AND `page1` LIKE '%match%' ESCAPE '!' AND `page2` LIKE '%match%' ESCAPE '!'
$builder->orHavingLike()
这个方法和上面的方法一样,只是多个条件之间使用 OR 进行连接:
$builder->havingLike('title', 'match'); $builder->orHavingLike('body', $match);
// HAVING `title` LIKE '%match%' ESCAPE '!' OR `body` LIKE '%match%' ESCAPE '!'
$builder->notHavingLike()
这个方法和 havingLike() 一样,只是它生成的是 NOT LIKE 子句:
$builder->notHavingLike('title', 'match'); // HAVING `title` NOT LIKE '%match% ESCAPE '!'
$builder->orNotHavingLike()
这个方法和 notHavingLike() 一样,只是多个条件之间使用 OR 进行连接:
$builder->havingLike('title', 'match');
$builder->orNotHavingLike('body', 'match');
// HAVING `title` LIKE '%match% OR `body` NOT LIKE '%match%' ESCAPE '!'