ThinkPHP 5 操作数据库三种方法

一、原生的sql语句

1. query:查询操作

query简单粗暴的方法

 public function getDetail($id){
       $data= Db::query('select * from test');
        return $data;
    }

在这里插入图片描述
可以传参数;用占位符或者命名占位符绑定

 public function getDetail($id){
       $data= Db::query('select * from test where id=?',[$id]);
        return $data;
    }

在这里插入图片描述

2. execute:写入操作

execute 插入数据,返回值是影响的记录数

$data= Db::execute('insert into test (name) values (?)',['thinkphp']);
        return $data;

二、使用查询构建器

备注:TP5框架有助手函数
Db::table(‘user’) 相当于 db(‘user’)

1.find、select

find()只能返回第一条数据(建议单个查询使用);select()是把所有符合的查询出来
细节:

find 方法查询结果不存在,返回 null
select 方法查询结果不存在,返回空数组

//链式表达式   
//链式操作where('字段名','表达式','查询条件')
//这里的等号可以缺审
$data=Db::table('test')->where('id',1)->find();
$data=Db::table('test')->select();
//助手函数
$data =db('test')->where('id',1)->find();
$data =db('test')->select();

在这里插入图片描述
在这里插入图片描述

2.insert

update 方法返回影响数据的条数,没修改任何数据返回 0

//插入单条数据
 $aa = ['name' => 'good'];
 $data=Db::table('test')->insert($aa);
//插入多条数据
  $bb = [
            ['name' => 'bb'],
            ['name' => 'cc'],
            ['name' => 'dd'],
        ];
  $data = Db::table('test')->insertAll($bb);
//函数助手
// 添加单条数据
 db('user')->insert($aa);
// 添加多条数据
 db('user')->insertAll($bb);
3.update
//更新某一条记录
 $data = Db::table('test')->where('id',1)->update(['name'=>'老张']);
//更新某条记录的某个字段的值:
 $data=Db::table('test')->where('id',2)->setField('name', '老四');
4.delete

delete 方法返回影响数据的条数,没有删除返回 0

// 根据主键删除
 $data=Db::table('test')->delete(6);
//可以传入数组,进行批量删除
 $data=Db::table('test')->delete([7,8]);
5.自增或自减一个字段的值

自增或自减一个字段的值
setInc/setDec 如不加第二个参数,默认值为1;第三个参数是延迟时间,单位秒

// score 字段加 1
Db::table('think_user')->where('id', 1)->setInc('score');
// score 字段加 5
Db::table('think_user')->where('id', 1)->setInc('score', 5);
// score 字段减 1
Db::table('think_user')->where('id', 1)->setDec('score');
//延迟更新,第三个参数是时间单位秒
Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);
6.使用Query或闭包查询
使用查询对象进行查询
$query = new \think\db\Query();
$query->table('think_user')->where('status',1);
Db::find($query);
Db::select($query);

//使用闭包函数查询
Db::select(function($query){
    $query->table('think_user')->where('status',1);
});
7.查询表达式

where(‘字段名’,‘表达式’,‘查询条件’);
whereOr(‘字段名’,‘表达式’,‘查询条件’);
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:

表达式含义
EQ、=等于(=)
NEQ、<>不等于(<>)
GT、>大于(>)
EGT、>=大于等于(>=)
LT、<小于(<)
ELT、<=小于等于(<=)
LIKE模糊查询
[NOT] BETWEEN(不在)区间查询
[NOT] IN(不在)IN 查询
[NOT] NULL查询字段是否(不)是NULL
[NOT] EXISTSEXISTS查询
EXP表达式查询,支持SQL语法
> time时间比较
< time时间比较
between time时间比较
notbetween time时间比较
8.链式操作 操作名称

所有的连贯操作都返回当前的模型实例对象(this),其中带*标识的表示支持多次调用。

连贯操作作用支持的参数类型
where*用于AND查询字符串、数组和对象
whereOr*用于OR查询字符串、数组和对象
wheretime*用于时间日期的快捷查询字符串
table用于定义要操作的数据表名称字符串和数组
alias用于给当前数据表定义别名字符串
field*用于定义要查询的字段(支持字段排除)字符串和数组
order*用于对结果排序字符串和数组
limit用于限制查询结果数量字符串和数字
page用于查询分页(内部会转换成limit)字符串和数字
group用于对查询的group支持字符串
having用于对查询的having支持字符串
join*用于对查询的join支持字符串和数组
union*用于对查询的union支持字符串、数组和对象
view*用于视图查询字符串、数组
distinct用于查询的distinct支持布尔值
lock用于数据库的锁机制布尔值
cache用于查询缓存支持多个参数
relation*用于关联查询字符串
with*用于关联预载入字符串、数组
bind*用于数据绑定操作数组或多个参数
comment用于SQL注释字符串
force用于数据集的强制索引字符串
master用于设置主服务器读取数据布尔值
strict用于设置是否严格检测字段名是否存在布尔值
sequence用于设置Pgsql的自增序列名字符串
failException用于设置没有查询到数据是否抛出异常布尔值
partition用于设置分表信息数组 字符串

如果想要深入了解查询表达式和链式操作的话;请点击

三、模型ORM

1.定义

在这里插入图片描述

默认主键为自动识别,如果需要指定,
可以设置属性: protected $pk = 'uid';

2.引用+获取数据 (get 、all)

获取单个数据

//引用
use app\index\model\Test as TestModel;
...
//获取主键为1的数据
 $data = TestModel::get(1);
//数组的方法
  $data = TestModel::get(['id'=>1]);
//闭包的方法
 $data = TestModel::get(function($query){
            $query->where('id', 1);
        });
 ...

获取多个数据

//引用
use app\index\model\Test as TestModel;
...
//获取所有数据
  $data =TestModel::all();

// 根据主键获取多个数据
$list = User::all('1,2,3');
// 或者使用数组
$list = User::all([1,2,3]);
foreach($list as $key=>$user){
    echo $user->name;
}
// 使用数组查询
$list = User::all(['status'=>1]);
// 使用闭包查询
$list = User::all(function($query){
    $query->where('status', 1)->limit(3)->order('id', 'asc');
});
foreach($list as $key=>$user){
    echo $user->name;
}

实例化的方法

 $user = new Test();
        // 查询单个数据
        $data=$user->where('id', 1)
            ->find();
        return $data;

    }
3.新增(save、saveAll)

新增一条

//新增一条
$test = new Test;
$test->name = 'thinkphp';
$test->save();

//data数组批量赋值
$test = new Test;
$test->data([
    'name'  =>  'thinkphp',
]);
$test->save();

//直接在实例化的时候传入数据
$test = new Test([
    'name'  =>  'thinkphp',
]);
$test->save();

批量新增

$test = new Test;
$list = [
    ['name'=>'thinkphp'],
    ['name'=>'onethink']
];
$test->saveAll($list);
4.更新(save、saveAll、update)

查询与更新

//在取出数据后,更改字段内容后更新数据。
$test = new Test;
$test= Test::get(1);
$test->name     = 'thinkphp';
$test->save();

.....
//也可以直接带更新条件来更新数据
$test = new Test;
// save方法第二个参数为更新条件
$test->save([
    'name'  => 'thinkphp',
],['id' => 1]);

批量更新

批量更新仅能根据主键值进行更新,其它情况请使用foreach遍历更新。

$test = new Test;
$list = [
    ['id'=>1, 'name'=>'thinkphp'],
    ['id'=>2, 'name'=>'onethink']
];
$test->saveAll($list);

静态方法更新

$data=Test::where('id', 1)
    ->update(['name' => 'thinkphp']);
//$data是受影响行数

//或者使用:
$data=Test::update(['id' => 1, 'name' => 'thinkphp']);
//$data返回结果集
5.删除(delete、destroy)
//delete方法
$data = Test::get(5);
$data->delete();

//根据主键删除
//或者直接调用静态方法
User::destroy(1);
// 支持批量删除多个数据
User::destroy('1,2,3');
// 或者
User::destroy([1,2,3]);

//条件删除
// 删除状态为0的数据
User::destroy(['status' => 0]);
//或者通过数据库类的查询条件删除
User::where('id','>',10)->delete();

V5.0.9+版本开始当destroy方法传入空值(包括空字符串和空数组)的时候不会做任何的数据删除操作,但传入0则是有效的

想要了解更多的相关操作可以点击下方链接:
https://www.kancloud.cn/manual/thinkphp5/118058

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值