- 查询语言.where
- 函数原型
- 字段 (表达式) 值
- 以数组直接传入
- OrWhere 语法
- whereBetween 语法
- whereBetween 二维数组语法支持
- whereNotBetween 语法
- whereIn 语法
- whereNotIn 语法
- whereNull 语法
- whereNotNull 语法
- whereLike 语法
- whereNotLike 语法
- whereExists 语法
- whereNotExists 语法
- whereDate、whereMonth、whereDay、whereYear 语法
- 分组查询
- 条件表达式支持
- 字段作为键值
- string__ 支持(支持字段)
- subor 和 suband 支持
查询语言.where
函数原型
public function where($mixCond /* args */);
字段 (表达式) 值
## SELECT `test`.* FROM `test` WHERE `test`.`id` = 1Db::table('test')->where('id', '=', 1)->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` = 2Db::table('test')->where('id', 2)->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` = 2 AND `test`.`name` > '狗蛋' AND `test`.`value` LIKE '小鸭子'Db::table('test')->where('id', 2)->where('name', '>', '狗蛋')->where('value', 'like', '小鸭子')->getAll();
以数组直接传入
## SELECT `test`.* FROM `test` WHERE `test`.`name` LIKE '技术'Db::table('test')->where(['name','like', '技术'])->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`name` LIKE '技术' AND `test`.`value` <> '结局'Db::table('test')->where ([['name','like', '技术'],['value','<>', '结局']])->getAll();
OrWhere 语法
## SELECT `test`.* FROM `test` WHERE `test`.`name` LIKE '技术'Db::table('test')->where('name','like', '技术')->orWhere('value','<>', '结局')->getAll();
whereBetween 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` BETWEEN 1 AND 100Db::table('test')->whereBetween('id', [1, 100])->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` BETWEEN 1 AND 10Db::table('test')->where('id','between', [1, 10])->getAll();
whereBetween 二维数组语法支持
后面的语法均支持这样的写法,后面不再继续示例了。
## SELECT `test`.* FROM `test` WHERE `test`.`id` BETWEEN 1 AND 100 AND `test`.`name` BETWEEN 5 AND 22Db::table('test')->whereBetween([['id', [1, 100]],['name', [5, 22]]])->getAll();
whereNotBetween 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` NOT BETWEEN 1 AND 10Db::table('test')->whereNotBetween('id', [1, 10])->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` NOT BETWEEN 1 AND 10Db::table('test')->where('id','not between', [1, 10])->getAll();
whereIn 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` IN (2, 50)Db::table('test')->whereIn('id', [2, 50])->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` IN ('1','10')Db::table('test')->where('id', 'in', '1,10')->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` IN (2,50)Db::table('test')->where('id', 'in', [2, 50])->getAll();
whereNotIn 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` NOT IN (2,50)Db::table('test')->whereNotIn('id', [2, 50])->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` NOT IN ('1','10')Db::table('test')->where('id','not in', '1,10')->getAll();
whereNull 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` IS NULLDb::table('test')->whereNull('id')->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` IS NULLDb::table('test')->where('id','null')->getAll();
whereNotNull 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` IS NOT NULLDb::table('test')->whereNotNull('id')->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` IS NOT NULLDb::table('test')->where('id','not null')->getAll();
whereLike 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` LIKE '5'Db::table('test')->whereLike('id','5')->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` LIKE '5'Db::table('test')->where('id','like', '5')->getAll();
whereNotLike 语法
## SELECT `test`.* FROM `test` WHERE `test`.`id` NOT LIKE '5'Db::table('test')->whereNotLike('id','5')->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` NOT LIKE '5'Db::table('test')->where('id','not like', '5')->getAll();
whereExists 语法
## SELECT `test`.* FROM `test` WHERE EXISTS (SELECT `subsql`.* FROM `subsql` WHERE `subsql`.`id` = 1)Db::table('test')->whereExists(function($select) {$select->table('subsql')->where('id', 1);})->getAll();## SELECT `test`.* FROM `test` WHERE EXISTS (SELECT `subsql`.* FROM `subsql`)$subSelect = Db::table('subsql');Db::table('test')->where(['exists__' => $subSelect])->getAll();## SELECT `test`.* FROM `test` WHERE EXISTS (select *from d_sub)Db::table('test')->where(['exists__' => 'select *from d_sub'])->getAll();## SELECT `test`.* FROM `test` WHERE EXISTS (SELECT `subsql`.* FROM `subsql` WHERE `subsql`.`id` = 1)Db::table('test')->where(['exists__' => function($select) {$select->table('subsql')->where('id', 1);}])->getAll();
whereNotExists 语法
## SELECT `test`.* FROM `test` WHERE NOT EXISTS ( SELECT `subsql`.* FROM `subsql` WHERE `subsql`.`id` = 1 )Db::table('test')->whereNotExists(function($select){$select->table('subsql')->where('id', 1);})->getAll();
whereDate、whereMonth、whereDay、whereYear 语法
本功能比较独立,剔除来了见《数据库构造器时间运算符 time endTime》
分组查询
## SELECT `test`.* FROM `test` WHERE `test`.`id` = '5' OR (`test`.`votes` > 100 AND `test`.`title` <> 'Admin')Db::table('test')->where('id', 5)->orWhere(function ($select) {$select->where('votes', '>', 100)->where('title', '<>', 'Admin');})->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`id` = '5' OR `test`.`name` = '小牛' AND (`test`.`votes` > 100 OR `test`.`title` <> 'Admin')Db::table('test')->where('id', 5)->orWhere('name', '小牛')->where(function ($select) {$select->where('votes', '>', 100)->orWhere('title', '<>', 'Admin');})->getAll();
条件表达式支持
条件表达式由 “{}” 包起来表示支持条件表达式,“[]” 表示支持字段格式化。
## SELECT `test`.`post`,`test`.`value`,concat("tt_",`test`.`id`) FROM `test` WHERE concat("hello_",`test`.`posts`) = `test`.`id`Db::table('test', 'post,value,{concat("tt_",[id])}')->where('{concat("hello_",[posts])}', '=', '{[id]}')->getAll();
字段作为键值
## SELECT `test`.* FROM `test` WHERE `test`.`id` = '故事' AND `test`.`name` IN (1,2,3) AND `test`.`weidao` BETWEEN '40' AND '100' AND `test`.`value` IS NULL AND `test`.`remark` IS NOT NULL AND `test`.`goods` = '东亚商品' AND `test`.`hello` = 'world'Db::table('test')->where(['id' => ['=', '故事'],'name' => ['in', [1,2,3]],'weidao' => ['between', '40,100'],'value' => 'null','remark' => ['not null'],'goods' => '东亚商品','hello' => ['world']])->getAll();
string__ 支持(支持字段)
## SELECT `test`.* FROM `test` WHERE `test`.`name` = 11 and `post`.`value` = 22 and concat("tt_",`test`.`id`)Db::table('test')->where (['string__' => '{[name] = 11 and [post.value] = 22 and concat("tt_",[id])}'])->getAll();
subor 和 suband 支持
## SELECT `test`.* FROM `test` WHERE `test`.`hello` = 'world' OR (`test`.`id` LIKE '你好')Db::table('test')->where (['hello' => 'world','subor__' => ['id', 'like', '你好']])->getAll();## SELECT `test`.* FROM `test` WHERE `test`.`hello` = '111' OR (`test`.`id` LIKE '你好' AND `test`.`value` = 'helloworld') AND (`test`.`id` LIKE '你好' OR `test`.`value` = 'helloworld' OR (`test`.`child_one` > '123' AND `test`.`child_two` LIKE '123'))Db::table('test')->where (['hello' => '111','subor__' => [['id', 'like', '你好'],['value', '=', 'helloworld']],'suband__' => ['logic__' => 'or',['id2', 'like', '你好2'],['value2', '=', 'helloworld2'],'subor__' => [['child_one', '>', '123'],['child_two', 'like', '123'],]]])->getAll();
