开发文档 v2.x

查询条件

更新时间:2024年6月19日 07:02 浏览:351

 

where - 单条件查询

where 用于 设置单个查询条件,多次调用 where 设置的条件之间是 AND 关系

public function where($field, string $op = null, $value = null): Table

参数:

  • string | array $field - 字段名或需要直接拼接进SQL的字符
  • string | null $op - 操作类型:=/<>/!=/>/</>=/<=/between/not between/in/not in/like/not like
  • string | array | null $value

返回值:

  • \Be\Db\Table - 表模型

 

完整的三个参数

三个参数分别表示:字段名操作符

$table = Be::getTable('user');

$table->where('name', 'like', '%Tom%');
$table->where('age', '=', 18);
$table->where('age', '>', 18);
$table->where('age', 'between', [18, 30]);
$table->where('id', 'in', [1, 2, 3, 4]);

$users = $table->getObjects();

其中,字段名 必须为字符串, 将使用占位符编译 SQL,防止注入

 

两个参数

当 操作符 为 '=' 时,可省略为两个参数,表示:字段名

$table = Be::getTable('user');

// 相当于: $table->where('name',  '=', 'Tom');
$table->where('name',  'Tom');

// 相当于: $table->where('age', '=',  18);
$table->where('age', 18);

 其中,字段名 必须为字符串, 将使用占位符编译 SQL,防止注入

 

一个参数:

当只有一个参数时,按参数类型,分两种情况,字符串 数组

当参数类型为 字符串 时,直接拼入 SQL

$table = Be::getTable('user');

$table->where("name LIKE 'Tom%'");
$table->where('id IN (SELECT user_id FROM user_role WHERER role_id = \'xxx\') ');

当的这个参数为 数组 时,数组中的项将作为参数调用 where 函数(即不定参数 $table->where(...$arr)

$table = Be::getTable('user');

$table->where(['age','>',18]); 
// 等价于:
// $table->where('age','>',18);

$table->where(['name','Tom']);
// 等价于:
// $table->where('name','Tom');

$table->where(["name LIKE 'Tom%'"]);
// 等价于:
// $table->where("name LIKE 'Tom%'");

 

condition - 一组条件查询

condition 用于 设置一组查询条件,组内需自行控制条件关系,组外条件之间是 AND 关系

public function condition(array $conditions): Table

参数:

  •  array $conditions - 一组查询条件

返回值:

  • \Be\Db\Table - 表模型

 

condition. 指定的一组查询条件可以认为是一个整体,生成的 SQL 会使用括号包裹。

 

代码示例:

$table = Be::getTable('user');

$table->condition([
     ['name','Tom'],
     'OR',
     ['age','>',18],
]);
// 等效SQL: WHERE (username='Tom' OR age>18)


$table->condition([
    '(',
    ['sex', '女'],
    'AND',
    ['age', '>=', 18],
    ')',
    'OR',
    ['sex', '男']
]); // 等效SQL: WHERE ( (sex = '女' AND age >= 18) OR sex = '男')

 

与 where 混用

$table = Be::getTable('user');

$table->where('name', 'like', 'B%')->condition([
    '(',
    ['sex', '女'],
    'AND',
    ['age', '>=', 18],
    ')',
    'OR',
    ['sex', '男']
]); 
// 最终结果等效SQL: 
// WHERE name LIKE 'B%' AND ( (sex = '女' AND age >= 18) OR sex = '男')

 

导航