【问题标题】:How to filter records when filter is a comma separated list of comma separated values in Laravel query当过滤器是Laravel查询中逗号分隔值的逗号分隔列表时如何过滤记录
【发布时间】:2022-01-25 15:04:42
【问题描述】:

我有一个表,其中有一列包含一串逗号分隔值 (skills_id)。

例如1,2,3,4

作为过滤器传入是另一组值。

例如4、5

因此,在下面的示例中,查询应返回其中任何过滤器值位于技能 ID 列中的任何记录。

声明@table 表 ( rownum 整数, 技能 ID varchar(250) )

插入@table 值 (1,'1, 2, 3,4') 插入@table 值 (2,'1, 2, 4, 5') 插入@table 值 (3,'1, 3, 4') 插入@table 值 (4,'3, 4') 插入@table 值 (5,'1, 2, 5, 4') 插入@table 值 (6,'3, 4, 5') 插入@table 值 (7,'5')

【问题讨论】:

    标签: sql laravel


    【解决方案1】:

    您可以像这样简单地使用REGEXP

    $search = preg_replace('/\s*, \s*/', '|', $request->skills_id);
    
    YourModel::whereRaw("skills_id REGEXP '{$search}'")->get();
    

    如果传入的值为 1,2,3,4,逗号后没有任何空格,则将正则表达式模式调整为:'/\s*,\s*/'

    【讨论】:

      【解决方案2】:
      $slills = $request->preferences;
              $jobs =  $jobs->orWhere(function($query) use($slills) {
                  foreach($slills as $skill) {
                      $query->orWhere('keyskills_id', 'like', "%$skill%");
                  };
              });
      

      它工作正常!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 2014-04-22
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        • 2020-10-20
        • 2014-02-18
        相关资源
        最近更新 更多