记录:
1,获取主表所有数据,但是条件限制关联表的查询结果
2,根据关联表的结果来限制主表的查询方式一:使用with预载入 + whereExists方法进行主表限制
3,根据关联表的结果来限制主表的查询方式二:使用whereHas方法用于检查关联模型中是否存在符合条件的记录
场景一:A --关联-- B --关联-- C (一对一关联)
需求:获取A表所有数据,但是条件限制B表和C表的查询结果
// 假设有三个模型:User,Profile,Detail,它们之间存在一对一的关联关系
// User模型中有如下方法定义关联
public function profile()
{
return $this->hasOne('Profile');
}
// Profile模型中有如下方法定义关联
public function detail()
{
return $this->hasOne('Detail');
}
// 获取所有用户数据,并查询地址是北京的个人资料
$userList = User::with(['profile' => function($query) {
$query->where('address', 'like', '%北京%'); // 第一层级关联的条件
$query->field('profile_id,title'); // 第一层级查询字段
$query->with('detail'); // 第二层级关联不添加条件,获取所有相关数据
}])->select();
// 获取所有用户数据,并查询地址是北京的个人资料和实名认证状态是1的实名认证信息
$userList = User::with(['profile' => function($query) {
$query->where('address', 'like',</