查询条件
更新时间:2024年12月3日 02:26
浏览:723
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 = '男')