Laravel报stdClass无法转字符串错误 如何匹配两表同occupation的用户ID
报错原因
Object of class stdClass could not be converted to string报错的核心是你调用get()方法获取到的是包含stdClass对象的结果集合,不是单个occupation字段的字符串值,直接将其传入where条件时,框架无法将对象转为字符串进行匹配,因此触发报错。
另外你的代码还有两处逻辑问题:
- 主键id是精确匹配场景,不需要使用
like模糊查询 get()方法适用于获取多条结果,你只需要取单个字段值,不需要用该方法
修正后的可运行代码
public function match(){ $id = Auth::id(); // 直接从preferences表取出对应用户的occupation字符串值 $target_occupation = DB::table('preferences')->where('id', $id)->value('occupation'); // 判空避免preferences无对应数据时查询异常 if (empty($target_occupation)) { return []; } // 匹配user_more_infos表中occupation相同的用户id $matched_user_ids = DB::table('user_more_infos')->where('occupation', $target_occupation)->select('id')->get(); return $matched_user_ids; }
代码说明
value('occupation')方法会直接返回查询结果第一条对应字段的原始值,不需要你再从对象/集合里手动取属性- 精确匹配场景下直接用
where('字段', 值)即可,不需要调用like,只有模糊搜索时才需要用到like搭配%通配符 - 增加了空值判断,避免preferences表中没有对应用户数据时,后续匹配查询出现逻辑错误
内容的提问来源于stack exchange,提问作者Amatul Uzma
相关产品推荐
相关产品推荐

