二十八PHP框架Laravel学习笔记——模型的关联查询

Posted 小小白学计算机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二十八PHP框架Laravel学习笔记——模型的关联查询相关的知识,希望对你有一定的参考价值。

二.关联查询

  1. 前几篇博文,了解了三种基础的关联模型,并简单的进行查询;
  2. 本节课,我们详细的了解更多的查询方案;
    //下面两种查询是一样的;
$books = User::find(19)->book; 
$books = User::find(19)->book()->get(); 

在这里插入图片描述

//可以采用 where 筛选或闭包

$books = User::find(19)->book() ->where('id', 1)->orWhere('id', 11)->get(); 


在这里插入图片描述

$books = User::find(10)->book()->where(function ($query) { 
	$query->where('id', 1)->orWhere('id', 11); 
})->get(); 

在这里插入图片描述

  1. 使用 has()方法,可以查询某些条件下的关联查询数据;
    //获取存在关联书籍的用户列表(言下之意:至少一本书)
$users = User::has('book')->get(); 
return $users; 

在这里插入图片描述

//获取存在关联书籍(并超过 3 条)的用户列表
$users = User::has(‘book’,’>=’, 3)->get();
return $users;
在这里插入图片描述

  1. 使用 whereHas()方法,创建闭包查询;
    //whereHas 闭包用法
$users = User::whereHas('book', function ($query) { 
	//这里$query 是 book 表,通过 user_id 查询,返回 user 表数据 
	$query->where('user_id', 19); })->get(); 
return $users; 

在这里插入图片描述

  1. 使用 doesntHave()方法,即 has()的反向操作;
    //获取不存在关联书籍的用户列表,闭包用法:whereDoesntHave()
$users = User::doesntHave('book')->get(); 
return $users;

在这里插入图片描述

  1. 使用 withCount()方法,可以进行关联统计;
    //关联统计,会自动给一个 book_count 字段
    //统计每个用户有多少本书
$users = User::withCount('book')->get(); 
return $users; 

在这里插入图片描述

//给多个关系添加统计:profile_count,book_count

$users = User::withCount(['profile', 'book'])->get(); 
return $users; 

在这里插入图片描述

//关联统计再结合闭包进行筛选,还可以设置别名

$users = User::withCount(['profile', 'book' => function ($query) { 
	//这里限制被统计的记录 
	$query->where('user_id', 19); }])->get(); 
	return $users;

在这里插入图片描述
在这里插入图片描述

以上是关于二十八PHP框架Laravel学习笔记——模型的关联查询的主要内容,如果未能解决你的问题,请参考以下文章

二十四PHP框架Laravel学习笔记——模型的数据集合

二十PHP框架Laravel学习笔记——模型的作用域

二十六PHP框架Laravel学习笔记——模型的一对多关联

二十五PHP框架Laravel学习笔记——模型的一对一关联

二十七PHP框架Laravel学习笔记——模型的多对多关联

二十一PHP框架Laravel学习笔记——模型的访问器和修改器