首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键/值对中的Laravel查询生成器

键/值对中的Laravel查询生成器
EN

Stack Overflow用户
提问于 2016-10-12 01:11:06
回答 2查看 547关注 0票数 0

我已经创建了一个表来存储票据的标签。我已经将多个标签保存为值列中以逗号(,)分隔的字符串。

代码语言:javascript
复制
+----+-----------+-------+---------------+---------------------+---------------------+
| id | ticket_id | key   | value         | created_at          | updated_at          |
+----+-----------+-------+---------------+---------------------+---------------------+
|  9 |        22 | label | Important,Bug | 2016-10-10 14:48:07 | 2016-10-10 14:48:07 |
| 17 |        21 | label |               | 2016-10-10 16:46:13 | 2016-10-10 16:46:13 |
+----+-----------+-------+---------------+---------------------+---------------------+

现在我必须搜索标签并获得相关的ticket_id,我的搜索词是一个数组

代码语言:javascript
复制
array:1 [
  0 => "Important"
]

请帮我写一个查询

EN

回答 2

Stack Overflow用户

发布于 2016-10-12 01:34:23

你应该试试这样的东西:

代码语言:javascript
复制
$query = Model::where('value','like','%' . $array[0] . '%');

for($i = 1; $i < sizeof($array); $i++) {
    $query->orWhere('value','like','%' . $array[i] . '%');
}

return $query->get();

警告,只有在5.3版本之后才需要第一个where方法。在此之前,您可以直接从orWhere子句开始。

雄辩作用域现在遵循作用域约束的前导布尔值。例如,如果您使用orWhere约束开始您的作用域,它将不再被转换为普通的where。如果您依赖此功能(例如,在循环中添加多个orWhere约束),则应验证第一个条件是否正常,以避免任何布尔逻辑问题。

票数 1
EN

Stack Overflow用户

发布于 2016-10-12 02:04:25

代码语言:javascript
复制
$filter = new Filter();
$query = $filter->where('key', 'label')
                ->where(function($query) use($labels) {
                    for ($i = 0; $i < count($labels); $i++) {
                        $query->orWhere('value', 'LIKE', '%' . $labels[$i] . '%');
                    }
                })
                ->get();

return $query; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39982873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档