在雄辩的 Where 子句中使用类似通配符的语法在两个字符串之间进行搜索

Posted

技术标签:

【中文标题】在雄辩的 Where 子句中使用类似通配符的语法在两个字符串之间进行搜索【英文标题】:Wildcard-like syntax in an eloquent Where clause to search between two strings 【发布时间】:2021-12-21 23:49:15 【问题描述】:

我看到了这个问题Wildcard-like syntax in an eloquent Where clause? 中提供的答案,现在我想知道是否有办法在两个字符串之间进行搜索?

基本上,在我的代码中,我想显示状态为新的或已安排的请求。

$requests = DB::table('requests')
        ->select('requestDate','requestTime','status','requestID')
        ->where('requestorID', '=',$userID)
        ->where('status', 'LIKE','%New%')
        ->get();

【问题讨论】:

我建议您在遇到困难时至少浏览一下文档——它们真的很清楚,可以回答像这样的最简单的问题。 AFAICT 为您所追求的一个解决方案是where()(对于requestorID)结合where()orWhere()(对于status)。 The docs describe exactly what you need. 【参考方案1】:

您可以使用whereIn,whereIn 方法验证给定列的值是否包含在给定数组中:

$requests = DB::table('requests')
        ->select('requestDate','requestTime','status','requestID')
        ->where('requestorID', '=',$userID)
        ->whereIn('status', ['new','scheduled'])
        ->get();

【讨论】:

我之所以没有建议 whereIn,是因为问题中使用了 LIKE。如果值恰好是 'new' 或 'scheduled' ,这是最好的解决方案。 @GertB.,如果我有一个名为 mostNew 的状态,这就是为什么使用 whereIn 确实,问题中的 Like 我很困惑,这就是为什么我赞成你的答案。【参考方案2】:

你可以使用:

->where('status', 'new')
->orWhere('status', 'scheduled')

【讨论】:

在这种情况下,当状态为“已调度”时,请求者 ID 将不起作用【参考方案3】:

您可以简单地将 where 与 orWhere 结合使用:

$requests = DB::table('requests')
        ->select('requestDate','requestTime','status','requestID')
        ->where('requestorID', '=',$userID)
        ->where(function($q) 
          $q->where('status', 'LIKE','%New%');
          $q->orWhere('status', 'LIKE','%Scheduled%');
       
        )->get();

【讨论】:

以上是关于在雄辩的 Where 子句中使用类似通配符的语法在两个字符串之间进行搜索的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中雄辩的where子句中连接两列

Laravel 雄辩的高级 where 子句:未定义的变量 |我使用 use()

用于嵌套 jsonb 的雄辩的 Where 子句。 PostgreSQL

使用 where 子句检索数据时,无论如何要检索计数 0 吗? (Laravel 雄辩)

laravel 雄辩的 where 子句与枢轴

在通配符 where 子句中使用 Select 语句