文章目录
- 数据库
- 链接
- 查询构造器
- 查询
- 添加
- 修改
- 删除
- 链式操作
- 链式操作
- where
- table
- field
- page
- odrder
- join
- cache
- 聚合查询
- 分页查询
数据库
链接
在config下有个database.php文件,一般情况下我们配置这个文件即可
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'xxx',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '123456',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
],
],
];
切换数据库一般用不到
有需要可以参考官方文档
地址: https://www.kancloud.cn/manual/thinkphp6_0/1037531
查询构造器
查询
查询单个数据
use think\facade\Db;
// table方法必须指定完整的数据表名
Db::table('think_user')->where('id', 1)->find();
find方法查询结果不存在,返回 null,否则返回结果数组
查询数据集
Db::table('think_user')->where('status', 1)->select();
select 方法查询结果是一个数据集对象,如果需要转换为数组在后面加上->toArray();
如果我们在配置文件中配置了表的前缀
那么我们可以用如下的写法来查询数据
Db::name('user')->where('id', 1)->find();
Db::name('user')->where('status', 1)->select();
查询某个字段的值
Db::table('think_user')->where('id', 1)->value('username');
存在返回值,不存在返回null
查询某列字段
返回数组
Db::table('think_user')->where('status',1)->column('name');
添加
添加一条数据
$data = ['username' => 'admin1', 'password' => md5('123456789')];
Db::name('user')->save($data);
$data = ['username' => 'admin1', 'password' => md5('123456789')];
Db::name('user')->insert($data);
insert 方法添加数据成功返回添加成功的条数,通常情况返回 1
添加多条数据
insertAll,返回受影响的行数
$data = [
['username'=>'admin2','password'=>md5('123456')],
['username'=>'admin3','password'=>md5('1234567')],
['username'=>'admin4','password'=>md5('12345678')],
];
Db::name('user')->insertAll($data);
修改
用save方法更新
返回受影响的行数
Db::name('user')
->save(['id' => 1, 'username' => 'admin1']);
用update更行
Db::name('user')
->where('id', 1)
->update(['username' => 'admin1']);
删除
根据主键删除数据
// 根据主键删除
Db::name('user')->delete(1);
Db::name('user')->delete([1,2,3]);
// 条件删除
Db::name('user')->where('id',1)->delete();
Db::name('user')->where('id','<',10)->delete();
// 无条件删除所有数据
Db::name('user')->delete(true);
// 软删除数据 使用delete_time字段标记删除,推荐使用
Db::name('user')
->where('id', 1)
->useSoftDelete('delete_time',time())
->delete();
上面是基本的增删改查操作
where语句可以像以下这样写
等号还可以换成其他符号
Db::name('user')->where('id','=',1)->select();
Db::name('user')->where('id',1)->select();
链式操作
where一个查询语句中可以跟多个where
Db::table('think_user')
->where('id','>',1)
->where('username','admin4')
->select();
table
下面的sql语句中,field用于查询指定字段
查询user表中的name属性和role中的title属性
table可以指定多张表和字段对应,limit限制查询的条数
Db::field('user.name,role.title')
->table('tb_user user,tb_role role')
->limit(10)->select();
//也可以写成数组的形式,为了避免和mysql的关键字冲突
Db::field('user.name,role.title')
->table([
'tb_user'=>'user',
'tb_role'=>'role'
])
->limit(10)->select();
这是建表的语句,以及操作的数据表
这是User模型的主要代码
要使用这些代码还需引入对应的类
use think\facade\Db;
public function getAllUser(){
return Db::name('user')->where('username','admin')->select();
}
public function getAllPassword(){
return Db::name('user')->where('username','admin')->column('password');
}
public function insertUser(){
$data = ['username' => 'admin1', 'password' => md5('123456789')];
return Db::name('user')->save($data);
}
public function insertAll(){
$data = [
['username'=>'admin2','password'=>md5('123456')],
['username'=>'admin3','password'=>md5('1234567')],
['username'=>'admin4','password'=>md5('12345678')],
];
return Db::name('user')->insertAll($data);
}
public function updateUser(){
return Db::name('user')->save(['id'=>1,'username'=>'admin1']);
}
public function deleteUser(){
return Db::name('user')->delete(1);
}
这是控制器的主要代码
要使用User模型的方法还需要初始化User
//先声明属性
protected $User;
//构造器实例化User类
public function __construct(){
$this->User = new User();
}
public function getAllUser(){
// $User = new User();
$res = $this->User->getAllUser();
return json($res);
}
public function getAllPassword(){
$res = $this->User->getAllPassword();
return json($res);
}
public function insertUser(){
$res = $this->User->insertUser();
return json($res);
}
public function insertAll(){
$res = $this->User->insertAll();
return json($res);
}
public function updateUser(){
$res = $this->User->updateUser();
return json($res);
}
public function deleteUser(){
$res = $this->User->deleteUser();
return json($res);
}
链式操作
where
一个sql语句中支持多个where条件
Db::table('think_user')
->where('id','>',1)
->where('username','admin')
->select();
table
一般模型能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了:
- 切换操作的数据表;
- 对多表进行操作
对多表进行操作,用field指定查询字段
table指定表,下面的列子中给tb_user设置了user别名
给tb_role设置了别名role
limit限制条数
下面的例子中就是查询tb_user 表中的names
Db::field('user.name,role.title')
->table('tb_user user,tb_role role')
->limit(10)->select();
field
用于查询指定字段
Db::table('user')->field('id,username')->select();
page
page方法主要用于分页查询
用limit实现分页查询
// 查询第一页数据
Db::table('article')->limit(0,10)->select();
// 查询第二页数据
Db::table('article')->limit(10,10)->select();
用page实现分页查询
// 查询第一页数据
Db::table('article')->page(1,10)->select();
// 查询第二页数据
Db::table('article')->page(2,10)->select();
odrder
order用于给查询结果进行排序,有desc和asc,默认asc
Db::table('user')
->where('status', 1)
->order('id', 'desc')
->limit(5)
->select();
join
JOIN方法用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
Db::table('tb_user')
->alias('a') //为tb_user设置表的别名为a
->join('tb_role r','a.id = r.r_id') //设置tb_role表的别名为r
->select();
cache
cache方法用于查询缓存操作
第一次查询结果会被缓存,第二次查询相同的数据的时候就会直接返回缓存中的内容,而不需要再次进行数据库查询操作。
Db::table('tb_user')->where('id',5)->cache(true)->find();
指定缓存的时间为60s
Db::table('user')->cache(true,60)->find();
设置缓存标识
Db::table('user')->cache('key',60)->find();
在外部就可以通过\think\Cache类直接获取查询缓存的数据,利用缓存标识
$data = \think\facade\Cache::get('key');
聚合查询
获取表中数据总量
Db::table('tb_user')->count();
根据字段统计数据
Db::table('think_user')->count('id');
分页查询
ThinkPHP内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在Db类查询的时候调用paginate方法
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->paginate(10);
下面这个例子中,list_rows是每页数量,current_page是当前页
$list = Db::name('user')->where('status',1)->paginate([
'list_rows'=> 20,
'current_page' => 'page',
]);
官方文档: https://www.kancloud.cn/manual/thinkphp6_0/1037571
那么就到此为止吧,再写就不礼貌了!