Laravel 8中如何实现搜索框按前端显示文本筛选布尔值字段
解决方案
完全可以实现,你只需要新增一层搜索词到数据库布尔值的映射逻辑即可,修改后的代码如下:
$search = $this->search; $searchLike = '%' . $search . '%'; // 前端显示文本到数据库存储值的映射,可根据需求修改为中文 $approvedMap = [ 'approved' => 1, 'not approved' => 0 ]; $searchApprovedVal = null; // 转小写处理适配大小写输入,无需用户严格匹配大小写 $lowerSearch = strtolower(trim($search)); if (isset($approvedMap[$lowerSearch])) { $searchApprovedVal = $approvedMap[$lowerSearch]; } $comments = Comment::where(function ($query) use ($searchLike, $searchApprovedVal) { // 原有普通字段模糊匹配逻辑 $query->where('title', 'like', $searchLike) ->orWhere('name', 'like', $searchLike) ->orWhere('email', 'like', $searchLike) ->orWhere('message', 'like', $searchLike); if (!is_null($searchApprovedVal)) { // 匹配到审核状态文本时,直接查询对应布尔值 $query->orWhere('approved', '=', $searchApprovedVal); } else { // 未匹配到状态文本时保留原有逻辑,兼容0/1搜索习惯 $query->orWhere('approved', 'like', $searchLike); } }) ->orderBy('created_at', 'desc') ->paginate($this->paginate);
额外说明
- 如果你的前端显示文本是中文,只需要修改
$approvedMap的键为对应中文即可,比如改成'已通过' => 1, '未通过' => 0 - 所有模糊查询条件统一放到where闭包中,避免后续新增全局筛选条件(如权限校验、软删除过滤)时出现SQL逻辑错误
- 自动适配大小写输入,用户输入
Approved、APPROVED、not approved都可以正确识别
内容的提问来源于stack exchange,提问作者kgcusi
相关产品推荐
相关产品推荐

