use think\Db;
Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
#支持占位符绑定
Db::query('select * from think_user where id=:id',['id'=>8]);
Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);
查询方法 | 作用描述 |
---|---|
table | 指定查询数据表 |
field | 指定查询字段 |
where | 指定查询条件 |
order | 指定结果排序 |
limit | 指定查询结果数 |
find | 查询一条记录 |
select | 查询数据集 |
insert | 写入数据 |
update | 更新数据 |
delete | 删除数据 |
需要注意的是,上述的查询方法中find,select,insert,update,delete都是查询操作,其他的都是辅助操作,辅助操作返回的是个对象,支持链式调用。但一旦执行了查询操作,就不能继续调用了。
不同的辅助操作,先后顺序没影响。
Db::table('banner')->where('id', '>', '2')->order('update_time asc')->select();
Db::table('banner')->order('update_time asc')->where('id', '>', '2')->select();
相同的查询操作,先后顺序有影响。
$list = Db::table('data')
->where('id', '>', 1)
->where('name', 'like', '%think%')
->order('id', 'desc')
->order('create_time', 'desc')
->limit(8)
->select();
$list = Db::table('data')
->where('name', 'like', '%think%')
->where('id', '>', 1)
->order('create_time', 'desc')
->order('id', 'desc')
->limit(8)
->select();
使用Db操作返回的是数组,使用模型返回的是对象。
想要使得模型对象可以连贯操作,可以在database.php中进行配置
'resultset_type' =>'\think\Collection'
#即可连贯操作
model('user')->select()->toArray()
Db:
Db::table('user')->insert([
'name' => 'spawn',
'email' => '[email protected]'
])
模型:
$user = new User;
$user->save([
'name' => 'spawn',
'email' => '[email protected]'
])
$user = User::create([
'name' => 'sapwn',
'email' => '[email protected]'
])
save(动态) 返回: 影响的记录数
create(静态) 返回:模型对象实例 (可以直接调用方法)
#增加一条数据
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
Db::name('user')->insert($data);
#添加数据后如果需要返回新增数据的自增主键,可以使用getLastInsID方法:
Db::name('user')->insert($data);
$userId = Db::name('user')->getLastInsID();
#或者直接使用insertGetId方法新增数据并返回主键值:
#insertGetId 方法添加数据成功返回添加数据的自增主键
Db::name('user')->insertGetId($data);
#添加多条数据
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
#insertAll 方法添加数据成功返回添加成功的条数
db('user')->insertAll($list);
#快捷操作
Db::table('data')
->data(['name'=>'tp','score'=>1000])
->insert();
// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
// 条件删除
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<',10)->delete();
#delete 方法返回影响数据的条数,没有删除返回 0
// 根据主键删除
db('user')->delete(1);
// 条件删除
db('user')->where('id',1)->delete();
$user = User::get(1);
$user->delete();
#或者
User::destory(1);
Db:
#update 方法返回影响数据的条数,没修改任何数据返回 0
Db::table('user')->where('id', 1)->update([
'name' => 'haha',
'email' => '[email protected]'
])
#更新某个字段的值
#setField 方法返回影响数据的条数,没修改任何数据字段返回 0
Db::table('think_user')->where('id',1)->setField('name', 'thinkphp');
#自增或自减一个字段的值,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');
// score 字段减 5
Db::table('think_user')->where('id', 1)->setDec('score', 5);
助手函数
// 更新数据表中的数据
db('user')->where('id',1)->update(['name' => 'thinkphp']);
// 更新某个字段的值
db('user')->where('id',1)->setField('name','thinkphp');
// 自增 score 字段
db('user')->where('id', 1)->setInc('score');
// 自减 score 字段
db('user')->where('id', 1)->setDec('score');
#快捷操作
Db::table('data')
->where('id',1)
->inc('read')
->dec('score',3)
->exp('name','UPPER(name)')
->update();
模型:
$user = User::get(1);
$user->save([
'name' => 'haha',
'email' => '[email protected]'
])
或者
User::update([
'name' => 'topthink',
'email' => '[email protected]',
], ['id' => 1]);
#save 更新数据 影响的记录数
#update 更新数据(静态) 返回模型对象实例
// table方法必须指定完整的数据表名
find 方法查询结果不存在,返回 null
$user = Db::table('user')->where('id', 1)->find();
$user = User::get(1);
select 方法查询结果不存在,返回空数组
Db::table('think_user')->where('status',1)->select();
//如果设置了数据表前缀参数的话,可以使用
Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();
//助手函数
db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
//query闭包
Db::select(function($query){
$query->table('think_user')->where('status',1);
});
// 返回某个字段的值
Db::table('think_user')->where('id',1)->value('name');//不存在返回null
#查询某一列的值可以用,不存在返回空数组
// 返回数组
Db::table('think_user')->where('status',1)->column('name');
// 指定索引
Db::table('think_user')->where('status',1)->column('name','id');
Db::table('think_user')->where('status',1)->column('id,name'); // 同tp3的getField
#数据分批处理
Db::table('think_user')->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
// 或者交给回调方法myUserIterator处理
Db::table('think_user')->chunk(100, 'myUserIterator');
#使用字符串条件的时候,建议配合预处理机制,确保更加安全
Db::table('think_user')->where("id=:id and username=:name")->bind(['id'=>[1,\PDO::PARAM_INT],'name'=>'thinkphp'])->select();
#alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
Db::table('think_user')->alias('a')->join('__DEPT__ b ','b.user_id= a.id')->select();
#SELECT * FROM think_user a INNER JOIN think_dept b ON b.user_id= a.id
Db::table('think_user')->alias(['think_user'=>'user','think_dept'=>'dept'])->join('think_dept','dept.user_id= user.id')->select();
#SELECT * FROM think_user user INNER JOIN think_dept dept ON dept.user_id= user.id
#field
Db::table('think_user')->field('id,title,content')->select();
#SELECT id,title,content FROM table
Db::table('think_user')->field('id,nickname as name')->select();
#SELECT id,nickname as name FROM table
Db::table('think_user')->field('id,SUM(score)')->select();
Db::table('think_user')->field(['id','title','content'])->select();
Db::table('think_user')->field(['id','nickname'=>'name'])->select();
Db::table('think_user')->field(['id','concat(name,"-",id)'=>'truename','LEFT(title,7)'=>'sub_title'])->select();
Db::table('think_user')->where('status=1')->order('id desc')->limit(5)->select();
Db::table('think_user')->where('status=1')->order(['order','id'=>'desc'])->limit(5)->select();
Db::table('think_user')
->where('status=1')
->field('id,name')
->limit(10)
->select();
Db::table('think_article')->limit('10,25')->select();
Db::table('think_article')->page('2,10')->select();
Db::table('think_user')
->field('user_id,test_time,username,max(score)')
->group('user_id,test_time')
->select();
Db::table('think_user')
->field('username,max(score)')
->group('user_id')
->having('count(test_time)>3')
->select();
Db::table('think_artist')
->alias('a')
->join('think_work w','a.id = w.artist_id')
->join('think_card c','a.card_id = c.id')
->select();
Db::table('think_user')->distinct(true)->field('user_login')->select();
#SELECT DISTINCT user_login FROM think_user