- 排序分组
- 使用whereColumn()方法实现两个字段相等的查询结果:
//判断两个相等的字段,同样支持 orWhereColumn()
//支持符号’create_time’,’>’,’update_time’
//支持符号支持数组多个字段格式[‘create_time’, ‘>’, ‘update_time’]
$users = \DB::table(‘users’)->whereColumn(‘create_time’, ‘update_time’)->get();
b. 使用orderBy()方法实现desc或asc排序功能
//支持 orderByRaw和orderByDesc 倒序方法
$users = \DB::table(‘users’)
->orderBy(‘id’,’desc’)
->get();
c. 使用 latest()方法设置时间倒序来排,默认时间字段是 created_at:
//按照创建时间倒序排,默认字段 created_at
$users = \DB::table(‘users’)->latest(‘create_time’)->get();
d. 使用 inRandomOrder()方法来随机排序,得到一个随机列表:
//随机排序
$users = \DB::table(‘users’)->inRandomOrder()->get();
e. 使用 skip()和take()限制结果集,或使用offset()和limit()
//从第2条开始,显示2条
$users = \DB::table(‘users’)->skip(1)->take(2)->get();
$users = \DB::table(‘users’)->offset(1)->limit(2)->get();
f. 使用when()方法可以设置条件选择,执行相应的SQL语句:
//when实现条件选择,如果写在开头的判断为true的话执行第一个where,如果为false的话则执行第二个where
$users = \DB::table(‘users’)->when(false, function($query){
$query->where(‘id’,20);
},function($query){
$query->where(‘id’,21);
})->get();
g. 如果MySQL在5.7+,有支持JSON数据的新特性;
$users = \DB::table(‘users’)->where(‘list->id’, 19)->get();
- 子查询
- 使用whereExists()方法实现一个子查询结果,返回响应的主查询:
//通过books 表数据,查询到users 表关联的用户
$users = \DB::table(‘users’)->whereExists(function ($query) {
$query->selectRaw(1) //这一段本可以不用添加,select 1 from,一般用于子查询的手段,目标是减少开销,提升效率,深入请搜索;
->from(‘books’)
->whereColumn(‘books.user_id’,’users.id’);
})->get();
b. 也可以使用where(字段,function())闭包,来实现一个子查询:
//id=子查询返回的user=id
$users = \DB::table(‘users’)->where(‘id’,function ($query) {
$query->select(‘user_id’)
->from(‘books’)
->whereColumn(‘books.user_id’,’users.id’);
})->get();