1. 排序分组
      1. 使用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();

    1. 子查询
      1. 使用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();