我创建了一个存储票证标签的表格。我已将多个标签保存为值列中的逗号(,)分隔字符串。
+----+-----------+-------+---------------+---------------------+---------------------+
| 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"
]
请帮我写一个查询
答案 0 :(得分:1)
你应该尝试类似的东西:
$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
条款开始。
Eloquent范围现在尊重范围约束的主要布尔值。 例如,如果您使用orWhere约束启动范围 它将不再转换为正常的地方。如果你依赖 此功能(例如在循环中添加多个或所有约束), 你应该验证第一个条件是正常的,在哪里避免 任何布尔逻辑问题。
答案 1 :(得分:0)
$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;