selectOrFail();//在没有查找到数据后抛出异常
Db::table('think_user')->where('status',1)->selectOrFail();
findOrFail();//在没有查找到数据后抛出异常
Db::table('think_user')->where('id',1)->findOrFail();
findOrEmpty();//当查询不存在时,返回空数组
Db::table('think_user')->where('id',1)->findOrEmpty();
查询某个字段的值,结果不存在时,返回null
Db::table('think_user')->where('id',1)->value('name');
查询某一列的值
// 返回数组
Db::table('think_user')->where('status',1)->column('name');
// 指定id字段的值作为索引
Db::table('think_user')->where('status',1)->column('name','id');
返回完整数据,并且添加一个索引值,查询结果不存在,返回空数组
// 指定id字段的值作为索引 返回所有数据
Db::table('think_user')->where('status',1)->column('*','id');
数据分批处理
全部用户表数据进行分批处理,每次处理 100 个用户记录:
Db::table('think_user')->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
// 或者交给回调方法myUserIterator处理
Db::table('think_user')->chunk(100, 'myUserIterator');
通过从闭包函数中返回false
来中止对后续数据集的处理:
Db::table('think_user')->chunk(100, function($users) {
foreach ($users as $user) {
// 处理结果集...
if($user->status==0){
return false;
}
}
});
支持在chunk
方法之前调用其它的查询方法,例如:
Db::table('think_user')
->where('score','>',80)
->chunk(100, function($users) {
foreach ($users as $user) {
//
}
});
chunk
方法的处理默认是根据主键查询,支持指定字段,例如:
Db::table('think_user')->chunk(100, function($users) {
// 处理结果集...
return false;
},'create_time');
并且支持指定处理数据的顺序。
Db::table('think_user')->chunk(100, function($users) {
// 处理结果集...
return false;
},'create_time', 'desc');
chunk
方法一般用于命令行操作批处理数据库的数据,不适合WEB访问处理大量数据,很容易导致超时。
大批量数据处理
如果需要处理大量的数据,可以使用新版提供的游标查询功能,该查询方式利用了PHP的生成器特性,可以大幅减少大量数据查询的内存占用问题。
$cursor = Db::table('user')->where('status', 1)->cursor();
foreach($cursor as $user){
echo $user['name'];
}
cursor
方法返回的是一个生成器对象,user
变量是数据表的一条数据(数组)。
JSON类型数据查询(mysql
)
// 查询JSON类型字段 (info字段为json类型)
Db::table('think_user')
->where('info->email','[email protected]')
->find();