Laravel 8:如何为orWhere查询添加条件实现特定搜索逻辑
Laravel 8 搜索功能扩展:添加“show me”专属查询逻辑
修改后的代码实现
if (!empty($searchText)) { // 标准化搜索文本,消除大小写和空格干扰 $normalizedSearch = strtolower(trim($searchText)); if ($normalizedSearch === 'show me') { // 仅筛选已分配owner id的记录 $customer->whereNotNull('owner_id'); // 若需排除空字符串的owner_id,可替换为下方条件 // $customer->where(function($query) { // $query->whereNotNull('owner_id') // ->where('owner_id', '!=', ''); // }); } else { // 保留原有搜索逻辑:关联details表,匹配name或product字段 $customer->join('details', 'customers.details_id', '=', 'details.id'); $customer->where('name', 'like', "%$searchText%") ->orWhere("details.product", "like", "%$searchText%"); } }
关键说明
- 文本标准化:通过
strtolower和trim处理输入文本,确保用户输入“Show Me”“show me”这类变体时也能触发正确的查询逻辑。 - 分支逻辑分离:
- 当搜索文本为“show me”时,仅添加
whereNotNull('owner_id')条件,无需关联details表,减少不必要的数据库关联开销。 - 其他搜索场景保持原有逻辑不变,确保功能兼容性。
- 当搜索文本为“show me”时,仅添加
- 特殊情况处理:如果业务中
owner_id存在空字符串(而非null)的未分配状态,可启用注释中的闭包条件,同时排除null和空字符串的记录。
内容的提问来源于stack exchange,提问作者vaishnavi
相关产品推荐
相关产品推荐

