【问题标题】:Filter out multiple where not like过滤掉多个不喜欢的地方
【发布时间】:2017-01-07 21:50:32
【问题描述】:

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

如果我使用

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

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

模式是动态生成的,因此最好使用数组。所以像

->whereNotLike('fieldName', ['%string1%', '%string2%'])

我正在使用 MySQL,所以我愿意使用原始查询,但查询生成器不支持此功能。

所以如果我有结果

string1_abc
string2_abc
string3_abc

那么我会得到

string3_abc

返回。

我不能使用whitelist 并且blacklist 模式是动态生成的。

【问题讨论】:

  • 您能否添加一个非常简短的示例来说明您正在寻找什么结果?你的问题很好,但有点不清楚你在问什么。
  • @JoelHinz 感谢您的反馈,已更新
  • 谢谢,现在我明白了。然后,您需要使用多个 where 子句。如果模式是动态生成的,那至少应该相当容易。
  • @JoelHinz ...我实际上想不出如何使用使用循环的查询生成器添加多个 where 子句。能举个例子吗?
  • 当然,我会马上解决的。 :)

标签: mysql laravel laravel-5 query-builder


【解决方案1】:

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

$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(...);,因为您正在转换现有查询而不是创建新查询。

【讨论】:

  • 假设not like 是一个正常运行的运算符,我在 Laravel 中没有看到自己...
  • 哇,我的大脑睡着了哈哈,是的,不像确实有效。谢谢
  • 太棒了,我很高兴它有帮助。 :)
【解决方案2】:

你可以使用'not like',比如:

->where('fieldName', 'not like', '%string%')

【讨论】:

  • 那么我必须使用多个where子句吗?没有等效的whereNotLike('fieldName', ['%string1%', '%string2%'])?我问是因为模式是动态生成的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
相关资源
最近更新 更多