数据库操作
1.1、连接数据库
在应用配置目录或者模块配置目录下面的config/database.php中配置下面的数据库参数
注:配置好的,一定要检查mysql服务是否开启,同时也要检查pdo是否打开。
同时还是创建好对应的数据库和连接数据库的用户名和密码并确保他们可以连接上你们的mysql服务器。
1.2、执行原生sql语句
Db类支持原生SQL查询操作
# 查询Db::query("select * from think_user where id=? AND status=?", [8, 1]);
# 添加、更新与删除Db::execute("update think_user set name=:name where status=:status", ['name' => 'thinkphp', 'status' => 1]);
1.3、添加数据Db
# 添加一条数据$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::name('user')->insert($data);
Db::name('user')->data($data)->insert();
db('user')->data($data)->insert();
# 添加数据后如果需要返回新增数据的自增主键$userId = Db::name('user')->insertGetId($data);
# 添加多条数据$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
db('user')->insertAll($data);
Db::name('user')->data($data)->insertAll();
添加一条
添加多条
1.4、更新数据
更新数据一定要写条件db('user')->where('id', 1)->update(['name' => 'thinkphp']);
db('user')->where('id', 1)->data(['name' => 'thinkphp'])->update();
Db::name('user')->update(['name' => 'thinkphp','id'=>1]);
# 5.1.7之后还支持了Db::raw写法Db::name('user')
->where('id', 1)
->update([
'name' => Db::raw('UPPER(name)'),
'score' => Db::raw('score-3'),
'read_time' => Db::raw('read_time+1')
]);
1.5、删除数据
# 根据主键删除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','delete();
# 无条件删除所有数据 小心去用Db::name('user')->delete(true);
# 软删除数据 使用delete_time字段标记删除 逻辑删除
# 软删除,必须要表中要delete_time字段Db::name('user')
->where('id', 1)
->useSoftDelete('delete_time',time())
->delete();
1.6、查询数据
# 查询一条数据db('user')->find(主键ID);
Db::name('user')->where('id',1)->find();
# 如果希望在没有找到数据后抛出异常可以使用Db::name('user')->where('id',1)->findOrFail();
# 查询多条记录Db::name('user')->where('status',1)->select();
# 如果希望在没有找到数据后抛出异常可以使用Db::name('user')->where('status',1)->selectOrFail();
# 查询某个字段的值可以用Db::name('user')->where('id',1)->value('name');
# 查询某一列的值可以用Db::name('user')->where('id',1)->column('name');
# 排序并获取指定记录条数Db::name('user')->order('id', 'desc')->limit(0,10)->select();
# 聚合查询Db::name('user')->count();
Db::name('user')->max('score');
Db::name('user')->where('score', '>', 0)->min('score');
Db::name('user')->avg('score');
Db::name('user')->where('id',10)->sum('score');
# 批量(字段)查询$map = [
['name', 'like', 'thinkphp%'],
['title', 'like', '%thinkphp'],
['id', '>', 0],
];
Db::table('think_user')
->where([ $map ])
->where('status',1)
->select();
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 ) AND `status` = '1'
# 闭包查询$name = 'thinkphp';
$id = 10;
Db::table('think_user')->where(function ($query) use($name, $id) {
$query->where('name', $name)->whereOr('id', '>', $id);
})->select();
SELECT * FROM `think_user` WHERE ( `name` = 'thinkphp' OR `id` > 10 )
# 获取器 5.1.20之后才有Db::name('user')->withAttr('name', function($value, $data) {
return strtolower($value);
})->select();
上面的代码,查询的数据集数据中的name字段的值会统一进行小写转换
效果