Laravel查询生成器的键/值对

时间:2016-10-11 17:11:06

标签: php mysql laravel

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

+----+-----------+-------+---------------+---------------------+---------------------+
| 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"
]

请帮我写一个查询

2 个答案:

答案 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;