过滤掉多个不喜欢的地方

时间:2016-08-31 10:39:00

标签: mysql laravel laravel-5 query-builder

我正在尝试RTM,但无法查看列出可能的where运算符列表的位置。我只看到>=<>like的基本示例。无论如何,我想过滤掉任何匹配多种模式的结果。

如果我使用

->whereNotIn('fieldName', ['exactString1', 'exactString2'])

然后我从结果中过滤掉这些确切的字符串。但是我想过滤掉多个模式(NOT LIKE)而不是多个字符串。

模式生成动态,因此使用数组会更好。像

这样的东西
->whereNotLike('fieldName', ['%string1%', '%string2%'])

我正在使用MySQL,所以我打开使用原始查询是查询构建器不支持这个。

所以,如果我有

的结果
string1_abc
string2_abc
string3_abc

然后我会得到

string3_abc

返回。

我无法使用whitelistblacklist模式是动态生成的。

2 个答案:

答案 0 :(得分:2)

这是一个非常基本的示例,说明如何动态添加多个条件到现有查询:

$patterns = [
    'field1' => ['pattern1', 'pattern2', 'pattern3'],
    'field2' => ['pattern4', 'pattern5'],
];

$query = MyModel::where('x', 'y'); // just an example of a query builder instance

foreach ($patterns as $field => $pattern) {
    $query->where($field, 'not like', '%'.$pattern.'%');
}

return $query->get();

显然在你的应用程序中看起来并不像这样,但希望你能得到这个想法。 :)

请注意,您不必执行$query = $query->where(...);,因为您正在转换现有查询而不是创建新查询。

答案 1 :(得分:1)

您可以使用value,例如:

'not like'