连接数据库
-
thinkphp采用内置抽象层将不同的数据库操作进行封装
-
数据抽象层是基于PDO模式
-
在根目录的config下的database.php设置数据库连接信息
-
在database.php配置中,default表示设置默认的数据库连接
-
在connections配置数据库连接信息,可以写入多个数据库,便于数据库中中切换
-
使用connect可以用于切换数据库
-
//例如:当前还有另外一个数据库test,里面有tp_user表 Db:connect('test')->table('tp_user')->select()
-
-
在model切换目录,使用受保护字段$connection
单数据查询
- Db::table()中table必须制定完整数据表(包括前缀)
- 如果只查询一条数据,可以使用find()方法
Db::table('tp_user')->where('id',1)->find();
- 如果数据库没有查询到数据会返回一个null
- Db::getLastSql()方法,可以得到最近一条sql查询的原生语句
- 使用findOrFail()方法同样可以查询一条数据,在没有数据时抛出异常
Db::table('tp_user')->where('id',1)->findOrFail();
- 使用findOrEmpty()方法也可以查询一条数据,在没有数据时返回一个空数组
Db::table('tp_user')->where('id',2)->findOrEmpty();
数据集查询
- 获取多列数据,可以使用select()方法,查询不到数据返回空数据集对象
Db::table('tp_user')->select();
- 多列数据在查询不到数据时返回空数组,使用selectOrFail()抛出异常
Db::table('tp_user')->selectOrFail();
- 在select()方法后使用toAttay()方法,可以将数据集对象转换成数组
Db::table('tp_user')->select()->toArray();
- 当数据库配置文件(database.php)设置了前缀,可以使用name()方法忽略前缀
Db::name('user')->select();
其他查询
- value()方法,可以查询指定字段的值(单个),没有数据会返回null
Db::name('user')->where('id',1)->value('username');
- column()方法,可以查询指定列的值(多个),没有数据返回空数组
Db::name('user')->column('username');
- 为了避免内存处理太多数据出错,可以是使用chunk()分批处理数据
Db::name('user')->chunk(3,function ($data){
foreach ($data as $val){
dump($val);
}
});
- 可以使用游标查询功能,大幅度减少海量数据的内存开销,利用了php生成器特性,每次查询只读一行,在读取时,自动定位到下一行继续读取,使用cursor()方法
$data = Db::name('user')->cursor();
foreach ($data as $val){
dump($val);
}