Laravel后端:如何实现多WHERE条件的分类数据查询(含指定ID)
正确实现方式
方法1:使用whereIn(推荐)
这是最简洁高效的写法,直接指定user_id需要匹配的取值数组:
public function get_categories() { $user_id = auth()->user()->id; $categories = Category::whereIn('user_id', [$user_id, 0])->get(); return $this->returnApiResponse(200, 'Categories fetched successfully', ['categories' => CategoryResource::collection($categories)]); }
方法2:使用orWhere
如果需要更灵活的条件组合,可以用orWhere构建“或”逻辑:
public function get_categories() { $user_id = auth()->user()->id; $categories = Category::where('user_id', $user_id) ->orWhere('user_id', 0) ->get(); return $this->returnApiResponse(200, 'Categories fetched successfully', ['categories' => CategoryResource::collection($categories)]); }
你之前写法的问题解析
- 用
+拼接两个集合:Laravel的Collection相加会以主键为依据去重,重复主键的记录会被覆盖,而且这种方式会发起两次数据库查询,效率远低于一次查询。 where('user_id', $user_id AND 0):这里的$user_id AND 0是PHP逻辑运算,结果为布尔值false,MySQL会将其转为0,最终查询的只有user_id=0的数据,完全没包含当前用户的ID,不符合需求。
内容的提问来源于stack exchange,提问作者user23730326
相关产品推荐
相关产品推荐

