我已经创建了一个表来存储票据的标签。我已经将多个标签保存为值列中以逗号(,)分隔的字符串。
+----+-----------+-------+---------------+---------------------+---------------------+
| 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,我的搜索词是一个数组
array:1 [
0 => "Important"
]请帮我写一个查询
发布于 2016-10-12 01:34:23
你应该试试这样的东西:
$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约束),则应验证第一个条件是否正常,以避免任何布尔逻辑问题。
发布于 2016-10-12 02:04:25
$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; https://stackoverflow.com/questions/39982873
复制相似问题