Thinkphp5/TP6条件查询方法
where方法
可以使用 where方法进行 AND条件查询:
Db::table(‘think_user’)->where(‘name’,‘like’,‘%thinkphp’)->where(‘status’,1)->find();
多字段相同条件的AND查询可以简化为如下方式:
Db::table(‘think_user’)->where(‘name&title’,‘like’,‘%thinkphp’)->find();
whereOr方法
使用whereOr方法进行OR查询:
Db::table(‘think_user’)->where(‘name’,‘like’,‘%thinkphp’)->whereOr(‘title’,‘like’,‘%thinkphp’)->find();
多字段相同条件的OR查询可以简化为如下方式:
Db::table(‘think_user’)->where(‘name|title’,‘like’,‘%thinkphp’)->find();
闭合/闭包查询
$name = 'thinkphp';$id = 10;Db::table('think_user')->where(function ($query) use($name, $id) {$query->where('name', $name)->whereOr('id', '>', $id);})->select();
生成的SQL语句为:
SELECT FROM think_user WHERE ( name = 'thinkphp' OR id > 10 )
混合查询
where方法和whereOr方法在复杂的查询条件中经常需要配合一起混合使用,下面举个例子:
$result = Db::table('think_user')->where(function ($query) {$query->where('id', 1)->whereor('id', 2);})->whereOr(function ($query) {$query->where('name', 'like', 'think')->whereOr('name', 'like', 'thinkphp');})->select();
生成的sql语句类似于下面:
SELECT FROM think_user WHERE ( id = 1 OR id = 2 ) OR ( name LIKE 'think' OR name LIKE 'thinkphp' )
注意闭包查询里面的顺序,而且第一个查询方法用where或者whereOr是没有区别的。
示例一:
->withAttr('owner_user_name', function($value, $lists) {return db('admin_member')->where('id','=',$lists['owner_user_id'])->value('truename');})->where('customer_id', 'IN', function ($query) use ($where_f) {$aa=$query->name('crm_customer_record')->where($where_f)->field('r_id')->select();// dump($aa);exit;})示例二:->where(function($query) use($role_id_arr){$query->whereIn('owner_role_id',$role_id_arr);})示例三:laravel:闭包/闭合// $where[] = ['id','in',$ids];//这种无效// $where[] = ['in'=>['problem_answers.id'=>$ids]];//这种无效$where[] = [function ($query) use ($ids) {$query->whereIn('problem_answers.id', $ids);},];
分块查询、批量插入
// 用户类型=管理人员$users = Db::name('admin_user')->where('tick_user_type',1)->field('id,department_selection')->select();$datas = [];foreach ($users as $v) {$datassub['user_id'] = $v['id'];$datassub['structure_id'] = $v['department_selection'];$datas[] = $datassub;}// 用户部门表(admin_user_structure)Db::name('admin_user_structure')->where('id','>',0)->delete();// 每批 200 条$batchSize = 200;$chunks = array_chunk($datas, $batchSize);foreach ($chunks as $c) {Db::name('admin_user_structure')->insertAll($c);}
getTableInfo方法
使用getTableInfo可以获取表信息,信息类型 包括 fields,type,bind,pk,以数组的形式展示,可以指定某个信息进行获取
// 获取think_user表所有信息Db::getTableInfo('think_user');// 获取think_user表所有字段Db::getTableInfo('think_user', 'fields');// 获取think_user表所有字段的类型Db::getTableInfo('think_user', 'type');// 获取think_user表的主键Db::getTableInfo('think_user', 'pk');
