数据库操作
基本使用:使用 hinkDb类我们就可以直接使用数据库运行原生SQL操作了,支持query(查询操作)和execute(写入操作)方法。
查询构造器
查询数据:
查询一条数据使用
// table方法必须指定完整的数据表名
Db::table('think_user')->where('id',1)->find();
查询数据集使用:
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();
值和列查询
查询某个字段的值可以用
// 返回某个字段的值
Db::table('think_user')->where('id',1)->value('name');
查询某一列的值可以用
// 返回数组
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
添加数据
添加一条数据
$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
insert 方法添加数据成功返回添加成功的条数,insert 正常情况返回 1
添加数据后如果需要返回新增数据的自增主键,可以使用getLastInsID方法:
Db::name('user')->insert($data);
$userId = Db::name('user')->getLastInsID();
或者直接使用insertGetId方法新增数据并返回主键值:
$data = ['foo' => 'bar', 'bar' => 'foo'];
$id = db('user')->insertGetId($data);
添加多条数据
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']];
Db::name('user')->insertAll($data);
助手函数
// 添加单条数据db('user')->insert($data);
// 添加多条数据db('user')->insertAll($list);
更新数据表中的数据
Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']);
如果数据中包含主键,可以直接使用:
Db::table('think_user')->update(['name' => 'thinkphp','id'=>1]);
更新某个字段的值
Db::table('think_user')->where('id',1)->setField('name', 'thinkphp');
自增或自减一个字段的值
// 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('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();
助手函数
// 根据主键删除
db('user')->delete(1);
// 条件删除
db('user')->where('id',1)->delete();
查询方法
where方法
$where[‘id’]=[‘>=’,2];
db(‘admin’)->where($where)->select();
Db::table('think_user')
->where('name','like','%thinkphp')
->where('status',1)
->find();
whereOr方法
Db::table('think_user')
->where('name','like','%thinkphp')
->whereOr('title','like','%thinkphp')
->find();
查询语法
where('id','eq',100);
where('id','=',100);
where('id','neq',100);
where('id','<>',100);
where('id','gt',100);
where('id','>',100);
where('id','egt',100);
where('id','>=',100);
where('id','lt',100);
where('id','<',100);
where('name','like','thinkphp%');
where('id','between','1,8');
where('id','not in','1,5,8');
链式操作
数据库提供的链式操作方法,可以有效的提高数据存取的代码清晰度和开发效率。
where、order和limit方法就被称之为链式操作方法,除了select方法必须放到最后一个外,链式操作的方法调用顺序没有先后。
Db::table('think_user')
->where('status',1)
->order('create_time desc')
->limit(10)
->select();
系统支持的链式操作方法有:
所有的连贯操作都返回当前的模型实例对象(this),其中带*标识的表示支持多次调用。
聚合查询
db(‘table’)->count();
db(‘table’)->max(‘score’);
page分页;
join多表联合查询
join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。
INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行