Laravel 5.5关联查询问题:如何按会员ID匹配查询成员
解决Laravel 5.5中按会员组筛选Member的查询需求
没问题,我来帮你搞定这个查询!首先得对齐咱们模型之间的关联关系——我先假设你的模型已经定义了如下关联(如果和你的实际方法名/关联方向有出入,调整对应名称即可):
- 在
Member模型中,关联到所属的User:public function user() { return $this->belongsTo(User::class); } - 在
User模型中,关联到所属的Membership:public function membership() { return $this->belongsTo(Membership::class); }
基于这个关联结构,你可以通过两种方式实现目标查询:
方法一:分步查询(更直观)
先拿到指定用户的会员ID,再筛选所有关联用户属于同一个会员组的Member:
// 1. 先获取你指定的目标用户(比如通过ID获取) $targetUser = User::find($yourTargetUserId); // 2. 拿到该用户对应的会员ID(这里如果User模型里直接存了membership_id字段,直接取就行;如果需要通过关联拿,就用$targetUser->membership->id) $targetMembershipId = $targetUser->membership_id; // 3. 查询所有符合条件的Member $qualifiedMembers = Member::whereHas('user', function ($query) use ($targetMembershipId) { $query->where('membership_id', $targetMembershipId); })->get();
方法二:链式一步完成
如果不想额外定义变量,也可以直接在查询里嵌套获取目标会员ID:
// 直接传入目标用户ID即可 $qualifiedMembers = Member::whereHas('user', function ($query) use ($yourTargetUserId) { $query->where('membership_id', User::find($yourTargetUserId)->membership_id); })->get();
优化建议:避免N+1查询
如果之后需要用到这些Member关联的User数据,可以加上with('user')预加载关联,避免后续的N+1查询问题:
$qualifiedMembers = Member::with('user') ->whereHas('user', function ($query) use ($targetMembershipId) { $query->where('membership_id', $targetMembershipId); }) ->get();
内容的提问来源于stack exchange,提问作者fightstarr20
相关产品推荐
相关产品推荐

