查询方法

where 方法

可以使用 where 方法进行条件查询,链式操作中,where 方法只能调用一次:

  1. Db::table('user')->where('name', 'LIKE', '%baigo', 'name', 'str')->find();
  2. Db::table('user')->where(array('name', 'LIKE', '%baigo', 'name', 'str'))->find();

生成的 SQL 语句类似于下面,系统会自动绑定占位符,执行查询并返回结果:

  1. SELECT * FROM `user` WHERE `name` LIKE :name
  2. // 真正执行的 SQL 语句
  3. SELECT * FROM `user` WHERE `name` LIKE '%baigo'

where 方法说明

  1. function where( $where [, $expression , $conditional [, $parameter = '' [, $type = '']]] )

参数

  • where 字段名

    支持两种类型:字符串、数组

  • expression 表达式

    where 为字符串时为必须,当 where 为数组时自动忽略。

    详情请查看 查询语法

  • conditional 条件值

    where 为字符串时为必须,当 where 为数组时自动忽略。

    详情请查看 查询语法

  • parameter 参数名

    where 为数组时自动忽略。

  • type 数据类型

    为空自动判断,当 where 为数组时自动忽略。

    可能的值

    | 值 | 描述 | | - | - | | str(默认值) | 字符串 | | int | 整数 | | float | 浮点数 | | double | 数字 | | bool | 布尔值 |

多条件查询

  1. $where = array(
  2. array('name', '=', 'baigo'),
  3. array('title', 'LIKE', '%baigo'),
  4. );
  5. Db::table('user')->where($where)->find();
  6. $where = array(
  7. // array('字段名', '表达式', '条件值', '参数名', '数据类型', '运算符 (为空则为 AND)'),
  8. array('name', 'LIKE', '%baigo', 'key', 'str'),
  9. array('title', 'LIKE', '%baigo', 'key', 'str', 'OR'),
  10. );
  11. Db::table('user')->where($where)->find();

生成的 SQL 语句类似于下面:

  1. SELECT * FROM `user` WHERE `name` = :name AND `title` LIKE :title
  2. SELECT * FROM `user` WHERE `name` LIKE :key OR `title` LIKE :key
  3. // 真正执行的 SQL 语句
  4. SELECT * FROM `user` WHERE `name` = 'baigo' AND `title` LIKE '%baigo'
  5. SELECT * FROM `user` WHERE `name` LIKE '%baigo' OR `title` LIKE '%baigo'

多字段相同条件的查询可以简化为如下方式:

  1. Db::table('user|title')->where('name', 'LIKE', '%baigo', 'key')->find();
  2. Db::table('user&title')->where('name', 'LIKE', '%baigo', 'key')->find();

生成的 SQL 语句类似于下面:

  1. SELECT * FROM `user` WHERE `name` LIKE :key OR `title` LIKE :key
  2. SELECT * FROM `user` WHERE `name` LIKE :key AND `title` LIKE :key
  3. // 真正执行的 SQL 语句
  4. SELECT * FROM `user` WHERE `name` LIKE '%baigo' OR `title` LIKE '%baigo'
  5. SELECT * FROM `user` WHERE `name` LIKE '%baigo' AND `title` LIKE '%baigo'

whereOr 方法

whereOr 链式操作中,whereOr 方法可以多次调用:

  1. $where = array(
  2. // array('字段名', '表达式', '条件值', '参数名', '数据类型', '运算符 (为空则为 AND)'),
  3. array('name', 'LIKE', '%baigo', 'key', 'str'),
  4. array('title', 'LIKE', '%baigo', 'key', 'str'),
  5. );
  6. $whereOr_1 = array(
  7. array('is_pub', '<', 1),
  8. array('time_pub', '<=', date('Y-m-d H:i:s'), 'date'),
  9. );
  10. $whereOr_2 = array(
  11. array('is_hide', '>', 1),
  12. array('time_hide', '>=', date('Y-m-d H:i:s'), 'date'),
  13. );
  14. Db::table('user')
  15. ->where($where)
  16. ->whereOr($whereOr_1)
  17. ->whereOr($whereOr_2)
  18. ->find();

生成的 SQL 语句类似于下面:

  1. SELECT * FROM `user` WHERE `name` LIKE :key AND `title` LIKE :key
  2. OR (`is_pub` < :is_pub AND `time_pub` <= :date)
  3. OR (`is_hide` > :is_hide AND `time_hide` >= :date)
  4. // 真正执行的 SQL 语句
  5. SELECT * FROM `user` WHERE `name` LIKE '%baigo' AND `title` LIKE '%baigo'
  6. OR (`is_pub` < 1 AND `time_pub` <= '2019-05-06 10:13:01')
  7. OR (`is_hide` > 1 AND `time_hide` >= '2019-05-06 10:13:01')

whereAnd 方法

whereAnd 链式操作中,whereAnd 方法可以多次调用:

  1. $where = array(
  2. // array('字段名', '表达式', '条件值', '参数名', '数据类型', '运算符 (为空则为 AND)'),
  3. array('name', 'LIKE', '%baigo', 'key', 'str'),
  4. array('title', 'LIKE', '%baigo', 'key', 'str'),
  5. );
  6. $whereAnd_1 = array(
  7. array('is_pub', '<', 1),
  8. array('time_pub', '<=', date('Y-m-d H:i:s'), 'date', '', '', 'OR'),
  9. );
  10. $whereAnd_2 = array(
  11. array('is_hide', '>', 1),
  12. array('time_hide', '>=', date('Y-m-d H:i:s'), 'date', '', '', 'OR'),
  13. );
  14. Db::table('user')
  15. ->where($where)
  16. ->whereAnd($whereAnd_1)
  17. ->whereAnd($whereAnd_2)
  18. ->find();

生成的 SQL 语句类似于下面:

  1. SELECT * FROM `user` WHERE `name` LIKE :key AND `title` LIKE :key
  2. AND (`is_pub` < :is_pub OR `time_pub` <= :date)
  3. AND (`is_hide` > :is_hide OR `time_hide` >= :date)
  4. // 真正执行的 SQL 语句
  5. SELECT * FROM `user` WHERE `name` LIKE '%baigo' AND `title` LIKE '%baigo'
  6. AND (`is_pub` < 1 OR `time_pub` <= '2019-05-06 10:13:01')
  7. AND (`is_hide` > 1 OR `time_hide` >= '2019-05-06 10:13:01')

混合查询

  1. $where = array(
  2. // array('字段名', '表达式', '条件值', '参数名', '数据类型', '运算符 (为空则为 AND)'),
  3. array('name', 'LIKE', '%baigo', 'key', 'str'),
  4. array('title', 'LIKE', '%baigo', 'key', 'str'),
  5. );
  6. $whereAnd = array(
  7. array('is_pub', '<', 1),
  8. array('time_pub', '<=', date('Y-m-d H:i:s'), 'date', '', '', 'OR'),
  9. );
  10. $whereOr = array(
  11. array('is_hide', '>', 1),
  12. array('time_hide', '>=', date('Y-m-d H:i:s'), 'date'),
  13. );
  14. Db::table('user')
  15. ->where($where)
  16. ->whereAnd($whereAnd)
  17. ->whereOr($whereOr)
  18. ->find();

生成的 SQL 语句类似于下面:

  1. SELECT * FROM `user` WHERE `name` LIKE :key AND `title` LIKE :key
  2. AND (`is_pub` < :is_pub OR `time_pub` <= :date)
  3. OR (`is_hide` > :is_hide AND `time_hide` >= :date)
  4. // 真正执行的 SQL 语句
  5. SELECT * FROM `user` WHERE `name` LIKE '%baigo' AND `title` LIKE '%baigo'
  6. AND (`is_pub` < 1 OR `time_pub` <= '2019-05-06 10:13:01')
  7. OR (`is_hide` > 1 AND `time_hide` >= '2019-05-06 10:13:01')