ThinkPHP6.0 链式SQL语句
阅读原文时间:2023年08月13日阅读:16

查询单个数据

$user = Db::query('select * from `user`');
$user=Db::table('user')->where('UserID',1001)->find();//查询结果为空 返回 null
$user=Db::table('user')->where('UserID',1001)->findOrEmpty();//查询结果为空 返回 空数组

查询结果集(查询结果返回多条数据的意思)

$user=Db::table('user')->where('UserID',1001)->select();
$user=Db::table('user')->where('UserID', 1001)->select()->toArray();

查询一个字段

$user=Db::table('user')->where('UserID',1002)->value('UserName');//只能返回一条数据

查询一列

        $user=Db::table('user')->where('Password',123456)->column('UserName');//可以返回多条数据

添加数据

        $data=['UserID'=>'1005','UserName'=>'Season','Password'=>'123456'];
        Db::name('user')->insert($data);

修改数据

        DB::table('user')->where('UserID',1005)->update(['Password'=>123]);

删除数据

根据主键删除

Db::table('user')->delete([1002,1003]);
条件删除

    Db::table('user')->where('Password',123)->delete();

查询数据

格式 where('字段名','查询表达式','查询条件');
            $user=Db::table('user')->where("UserID","=",1001)->select();

模糊查询

        $user=Db::table('user')->where('UserName','like','s%')->select();

区间查询

        $user=Db::table('user')->where('UserID','between','1001,1003')->select();

IN查询

        $user=Db::table('user')->where('UserID','in',[1001,1003])->select();

Not Null

        $user=Db::table('user')->where('Password','not null')->select();

Null

        $user=Db::table('user')->where('Password',null)->select();

链式操作示例

        $user=Db::table('user')->where('Password',123456)->order('UserName')->select();

field操作(输出选择的字段名的数据)

        $user=Db::table('user')->field('UserID,UserName')->select();

链式alias操作,设置表的名称(为了方便后面内容的书写)

        $user=Db::table('user')->alias('a')->where('a.UserID',1001)->select();

limit 操作

        $user=Db::table('user')->limit(2)->select();

page操作

        $user=Db::table('user')->page(2,5)->select();

order操作,默认asc

        $user=Db::table('user')->order('UserID')->select();
        $user=Db::table('user')->order('UserID','desc')->select();

group 操作

        $user=Db::table('user')->alias('u')->field('u.Status,SUM(u.Price)')->group('u.Status')->select();

having操作

$user=Db::table('user')->alias('u')->field('u.Status,SUM(u.Price)')->group('u.Status')->having('u.Status>0')->select();

join操作

​ INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行

​ LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

                     RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

                       FULL JOIN: 只要其中一个表中存在匹配,就返回行

Transaction(自动):当函数内的sql语句出现错误了,则函数内的sql语句都不执行

Db::Transaction(function (){
    Db::name('user')->where('UserID',1001)->save(['Price'=>Db::raw('Price-3')]);
    Db::name('user')->where('UserID',1002)->save(['Price'=>Db::raw('Price+3')]);
});

startTrans(手动):当sql语句出现错误了,则sql语句都不执行

Db::startTrans();
try {
    Db::name('user')->where('UserID',1001)->save(['Price'=>Db::raw('Price-3')]);
    Db::name('user')->where('UserID',1002)->save(['Price'=>Db::raw('Price+3')]);

    Db::commit();//提交事务
}catch (\Exception $e){
    echo '执行SQL失败,开始回滚数据';
    Db::rollback();
}

获取器:$value 所有字段名是“UserName”的数据 $data所有数据

$user=Db::name('user')->withAttr('UserName',function ($value,$data){
    var_dump($value);
    var_dump($data);
})->select();;