1.基础查询
public function index()
{
//游标查询功能
// $cursor = Db::table('tp_user')->cursor();
// foreach($cursor as $user){ dump($user);break; }
//分批处理数据
// Db::name('user')->chunk(1,function ($users){
// foreach ($users as $user){
// dump($user);
// }
// echo 222;
// });
// $user = Db::name('user')->column('username', 'id');
// $user = Db::name('user')->column('username');
// $user = Db::table('tp_user')->select()->toArray();
// $user = Db::table('tp_user')->where('id', 19)->findOrFail();
// return json($user);
// $user = Db::table('tp_user')->where('id',19)->find();
// return Db::getLastSql();
// $user = Db::table('tp_user')->select();
// return json($user);
// dump($user);
// halt(111);
}
/**
* User: wuJiaWei
* DateTime: 2024/6/22 10:49:51
* describe:数据库切换
* @return \think\response\Json
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function demo()
{
$user = Db::connect('demo')->table('tp_user')->field(true)->select();
return json($user);
}
/**
* User: wuJiaWei
* DateTime: 2024/6/22 10:50:10
* describe:模型调用
* @return User[]|array|\think\Collection
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getUser()
{
return User::select();
}
2. 数据库的新增
save、insert、insertGetId、insertAll、replace、strict(false)
save()新增
1. save()方法是一个通用方法,可以自行判断是新增还是修改(更新)数据; 2. save()方法判断是否为新增或修改的依据为,是否存在主键,不存在即新增; Db::name('user')->save($data);
public function addPost()
{
$data = [ 'id'=>303,'username' => 'testaaa2024', 'password' => '123', 'gender' => '女', 'email' => 'huiye@163.com', 'price' => 90, 'details' => '123' ];
$data2 = [ 'idss'=>303,'username' => 'testaaa2024', 'password' => '123', 'gender' => '女', 'email' => 'huiye@163.com', 'price' => 90, 'details' => '123' ];
// Db::name('user')->insert($data);
// Db::name('user')->replace()->insert($data);//主键重复则更新数据
// return Db::name('user')->insertGetId($data);
// Db::name('user')->strict(false)->insertGetId($data2);//忽略异常
return 'ok';
}
public function batchAdd()
{
$data = [
[
'id'=>'303','username' => 'ahahahah', 'password' => '123', 'gender' => '女', 'email' => 'huiye@163.com', 'price' => 90, 'details' => '123'
],
[
'id'=>'304','username' => 'haahkalal', 'password' => '123', 'gender' => '女', 'email' => 'huiye@163.com', 'price' => 90, 'details' => '123'
]
];
try {
Db::name('user')->replace()->insertAll($data);//主键重复则更新数据
}catch (\Exception $exception){
return $exception->getMessage();
}
return 'ok';
}
数据库的修改删除
update 、 save
如果想让一些字段修改时执行 SQL 函数操作,可以使用 exp()方法实现。
Db::name('user')->where('id', 232) ->exp('email', 'UPPER(email)') ->update();
如果要自增/自减某个字段,可以使用 inc/dec 方法,并支持自定义步长
Db::name('user')->where('id', 232) ->inc('price') ->dec('status', 2) ->update();
一个更加简单粗暴灵活的方式,使用::raw()方法实现自增自减等函数操作的内容
Db::name('user')
->where('id',232)
->update(['email'=>Db::raw('UPPER(email)'),'price'=>Db::raw('price+1'),'status'=>Db::raw('status - 2')]);
数据删除
- 极简删除可以根据主键直接删除,删除成功返回影响行数,否则 0;
Db::name('user')->delete(51); - 根据主键,还可以删除多条记录;
Db::name('user')->delete([48,49,50]); - 正常情况下,通过 where()方法来删除;
Db::name('user')->where('id', 47)->delete(); - 通过 true 参数删除数据表所有数据,我还没测试,大家自行测试下;
Db::name('user')->delete(true);
3.数据库的查询表达式
public function queryExpression()
{
//比较查询
Db::name('user')->where('id',80)->find();
Db::name('user')->where('id','=',80)->find();
Db::name('user')->where('id','>=<=',80)->find();
//区间查询 都是可以逗号隔开或者数组 like between in
Db::name('user')->where('email','like',['xiao%','xiao2%'])->select();
Db::name('user')->where('email','not like','xiao%')->select();
Db::name('user')->whereLike('email','xiao%')->select();
Db::name('user')->whereNotLike('email','xiao%')->select();
Db::name('user')->whereBetween('id','in',[19,20,21])->select();
Db::name('user')->whereBetween('id','in',[19,20,21])->select();
Db::name('user')->where('id','in','19,20,21')->select();
Db::name('user')->whereBetween('id','not in',[19,20,21])->select();
Db::name('user')->where('id','in',[19,20,21])->select();
Db::name('user')->whereNotIn('id','in',[19,20,21])->select();
//null 表达式具有两个快捷方式 whereNull()和 whereNotNull();
Db::name('user')->where('uid','null')->select();
Db::name('user')->where('uid','not null')->select();
Db::name('user')->whereNull('uid')->select();
Db::name('user')->whereNotNull('uid')->select();
//EXP 查询 1. 使用 exp 可以自定义字段后的 SQL 语句;
Db::name('user')->where('id','exp','IN (19,21,25)')->select();
Db::name('user')->whereExp('id','IN (19,21,25)')->select();
}