$rs=Db::name('school')->where($type,'like',"%{$key}%")->order('id desc')->limit($limit)->page($page)->select();



一、TP5.1版本

if($sotitle){

if($sotype=="id"){
$where[$sotype] = $sotitle;

}else{
$where = [
['title', 'like', "%".$sotitle."%"],
];
}

}
$where['level'] = 1;


$rs1=Db::name('column')->

where($where)->select();


注意,V5.1.7+版本数组方式如果使用exp查询的话,一定要用raw方法。

Db::table('think_user')
->where([
['name', 'like', 'thinkphp%'],
['title', 'like', '%thinkphp'],
['id', 'exp', Db::raw('>score')],
['status', '=', 1],
])
->select();

数组查询方式,确保你的查询数组不能被用户提交数据控制,用户提交的表单数据应该是作为查询数组的一个元素传入,如下:

Db::table('think_user')
->where([
['name', 'like', $name . '%'],
['title', 'like', '%' . $title],
['id', '>', $id],
['status', '=', $status],
])
->select();

注意,相同的字段的多次查询条件可能会合并,如果希望某一个where方法里面的条件单独处理,可以使用下面的方式,避免被其它条件影响。

$map = [
['name', 'like', 'thinkphp%'],
['title', 'like', '%thinkphp'],
['id', '>', 0],
];
Db::table('think_user')
->where([ $map ])
->where('status',1)
->select();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 ) AND `status` = '1'

如果使用下面的多个条件组合

$map1 = [
['name', 'like', 'thinkphp%'],
['title', 'like', '%thinkphp'],
];

$map2 = [
['name', 'like', 'kancloud%'],
['title', 'like', '%kancloud'],
];

Db::table('think_user')
->whereOr([ $map1, $map2 ])
->select();

生成的SQL语句为:

SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' ) OR ( `name` LIKE 'kancloud%' AND `title` LIKE '%kancloud'

善用多维数组查询,可以很方便的拼装出各种复杂的SQL语句