二十八、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;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值