Laravel如何检查模型数据是否存在于另一张表并获取符合条件的RequestState
实现方案
步骤1:补全模型关联(未配置的情况下需要先添加)
在对应模型中添加如下关联方法:
RequestState模型添加和Request的从属关联
public function request() { return $this->belongsTo(Request::class); }
Request模型添加和User的从属关联
public function user() { return $this->belongsTo(User::class); }
- 确认
User模型已配置和Graduate的一对一关联
public function graduate() { return $this->hasOne(Graduate::class); }
步骤2:编写查询代码
使用Laravel关联存在查询方法whereDoesntHave嵌套过滤,直接得到符合要求的结果:
$requestStates = RequestState::where('department_id', auth()->user()->department_id) ->whereHas('request', function ($query) { // 过滤关联请求对应的用户不在毕业生表的记录 $query->whereDoesntHave('user.graduate'); }) ->get();
如果不想用关联查询,也可以用子查询实现:
// 先获取所有毕业生的用户ID $graduatedUserIds = Graduate::pluck('user_id'); // 获取对应用户不是毕业生的请求ID $validRequestIds = Request::whereNotIn('user_id', $graduatedUserIds)->pluck('id'); // 过滤符合部门要求+请求ID有效的RequestState记录 $requestStates = RequestState::where('department_id', auth()->user()->department_id) ->whereIn('request_id', $validRequestIds) ->get();
内容的提问来源于stack exchange,提问作者ali dehqani
相关产品推荐
相关产品推荐

