1. 关联查询
      1. 前几节课,了解了三种基础的关联模型,并简单的进行查询;
      2. 本节课,我们详细的了解更多的查询方案;

    //下面两种查询是一样的;
    $books = User::find(20)->book;$books = User::find(20)->book;
    $books = User::find(20)->book()->where(‘id’, 1)->orWhere(‘id’, 3)->get();

    //可以采用where筛选或闭包
    $books = User::find(20)->book()->where(‘id’, 1)->orWhere(‘id’, 3)->get();
    $books = User::find(20)->book()->where(function($query){
    $query->where(‘id’, 1)->orWhere(‘id’, 3);
    })->get();
    c. 使用has()方法,可以查询某些条件下的关联查询数据;
    //获取存在关联数据的用户列表(言下之意: 至少一本书)
    $users = User::has(‘book’)->get();
    return $users;

    //获取存在关联书籍(并超过3条)用户列表
    $users = User::has(‘book’, ‘>=’, 3)->get();
    return $users;
    d. 使用whereHas()方法,创建闭包查询;
    //whereHas闭包用法
    $users = User::whereHas(‘book’, function ($query){
    //这里$query是book表,通过user_id查询,返回user表数据
    $query->where(‘user_id’, 20);
    })->get();
    return $users;
    e. 使用doesntHave()方法,即has()的反向操作;
    //获取不存在关联数据的用户列表,闭包用法:whereDoesntHave()
    $users = User::doesntHave(‘book’)->get();
    return $users;
    f. 使用withCount()方法,可以进行关联统计:
    //关联统计,会自动给一个book_count字段
    //统计每个用户有多少本书
    $users = User::withCount(‘book’)->get();
    return $users;

    //给多个关系添加统计:profile_count, book_count
    $users = User::withCount([‘profile’, ‘book’])->get(); //可以这样子改名里面的book as b参数book
    return $users;

    //关联统计再结合闭包进行筛选,还可以设置别名
    $users = User::withCount([‘profile’, ‘book’ => function ($query){
    //这里限制被统计的记录
    $query->where(‘user_id’, 20);
    }])->get();
    return $users;