Laravel问题:用户模型无匹配时关联查询用户公司模型返回空集合排查
问题出在查询逻辑的方向错啦!
你当前的代码是在找**同时满足「用户自身email等于请求邮箱」和「关联的公司邮箱也等于请求邮箱」**的用户,这和你想要的「要么用户自己邮箱匹配,要么关联公司邮箱匹配」的逻辑完全相反,所以才会返回空集合。
我给你两种解决思路:
思路一:分步查询(先查用户,再查关联)
先直接查找用户自身邮箱匹配的记录,如果没找到,再通过关联的公司邮箱去查:
// 先找用户自身邮箱匹配的记录(用first()找单个,用get()找集合,看你需求) $companyUser = \App\User::where('email', $request->email)->first(); // 如果没找到,再通过关联的company查找公司邮箱匹配的用户 if (!$companyUser) { $companyUser = \App\User::whereHas('company', function ($query) use ($request) { $query->where('company_email', $request->email); })->first(); }
思路二:用OR条件一次查询(更高效)
直接用orWhereHas把两个条件合并成一次查询,返回所有满足任一条件的用户:
$companyUser = \App\User::where('email', $request->email) ->orWhereHas('company', function ($query) use ($request) { $query->where('company_email', $request->email); }) ->get();
另外还要排查几个可能的隐藏问题:
- 检查User模型的
company关联是否正确:比如是不是正确关联了UserCompany模型,外键有没有设置对?举个例子,User模型里的关联方法应该类似这样:
public function company() { // 假设User表有company_id字段,关联UserCompany的id return $this->belongsTo(\App\UserCompany::class); }
- 确认数据库里确实存在符合条件的数据:比如有没有用户的email等于请求的邮箱,或者有没有用户关联的UserCompany的company_email等于请求邮箱?别是数据本身不存在导致的空集合哦。
- 检查请求的email值是否正确:可以先
dd($request->email)看看实际传入的是什么,有没有多余的空格或者大小写问题。
内容的提问来源于stack exchange,提问作者Dip
相关产品推荐
相关产品推荐

