好用的查询方法,对于常用的各种情况:
private $map=[
['user_name',"like","%o%"],
['user_nickname',"like","%o%"],
['user_id',">",0]
];
private $map2=[
['user_city','=','成都']
];
//二维数组配合条件查询
private function advancedQuery1(): \think\response\Json
{
$result=null;
try {
$result = Db::name("users")
->where([$this->map])
->where('user_sex', "男")
->select();//select返回的是数组,find返回的是对象,对于数据量较大时一般不用
} catch (\Exception $e) {
}
return json($result);
}
//多个二维数组参数查询
private function advancedQuery2(): \think\response\Json
{
$result=null;
try {
$result = Db::name("users")
->whereOr([$this->map,$this->map2])
->findOrEmpty();//未匹配到时返回空数组,selectOrEmpty同理
} catch (\Exception $e) {
}
return json($result);
}
//原生查询,为了安全起见,将参数引入,适用于比较复杂的查询
private function advancedQuery3(){
$map=['id' => 0, 'name' => '%%'];
$result=null;
try {
$result = Db::table("bloggo_users")
->whereRaw("user_id> :id AND user_name LIKE :name", $map)
->select(3);//查找第3条数据
} catch (\Exception $e) {
}
return $result;
}
//筛选属性
private function advancedQuery4(){
$result=null;
try {
$result = Db::table("bloggo_users")
->field("user_id,user_name,user_nickname")//注意这里是字符串不是数组
->find(2);//获取第2条数据,无参数表示第一条,如果无匹配项就返回null
} catch (\Exception $e) {
}
return $result;
}
//聚合查询
private function advancedQuery5(): ?int
{
$result=null;
try {
$result = Db::table("bloggo_users")
->where($this->map)
->count();//统计总条目数
} catch (\Exception $e) {
}
return $result;
}
//游标查询,用于数据量大时的查询,可以有效减小开销
private function advancedQuery6(){
$list=null;
try {
$list = Db::name("validate")
->order("user_id", "desc")//降序排
->cursor();
} catch (\Exception $e) {
}
foreach ($list as $item){
echo $item['validate_id'];
}
}
//部分查询
private function advancedQuery7(){
$res=Db::name('test')
->limit(0,2)//查询部分数据,左闭右开
->selectOrFail(1);//查询到数据的第一条,未查询则到报错
return json($res);
}
//分页查询,自制
/*
* tableName 表名
* start 起始位置
* pageNum 每页显示数
* map 查询条件
*/
private function advancedQuery8(string $tableName,int $start,int $pageNum,array $map)
{
$res=Db::name($tableName)
->where($map)
->limit($start,$start+$pageNum)
->select();
return $res;
}
//时间查询
private function advancedQuery9(){
$res=Db::name("validate")
->where('validate_create_time',">",'2021-09-04')
->select();
return json($res);
}