【问题标题】:Laravel search for specific wordLaravel 搜索特定单词
【发布时间】:2016-05-20 06:57:46
【问题描述】:

我想从表格中搜索特定单词而不是字母。现在我正在使用like,但它不像预期的那样:

//  Category Table
-----------------------------------------------------
| id       |   amount           |  updated_at       |
+----------+--------------------+-------------------+
| 1        | Bread              |2016-02-10 13:17:29|  
| 2        | Bread Loaf         |2016-02-10 13:17:29|
| 3        | Bread1             |2016-02-10 13:17:29|
+----------+--------------------+-------------------+

例如我搜索“面包”这个词:

$words = "bread";
$query = Category::where(function ($query) use ($words) {
              $query->where('name', 'like', '%' . $words . '%');
         })->get();

结果:所有的面包都出来了。

我期望的是“Bread1”没有得到查询。只有面包和面包。

我应该在查询中添加什么?

【问题讨论】:

  • 你可能想试试这个 SELECT * FROM products WHERE product_name RLIKE "[[:<:>:]]"; Same Question Here
  • 基本上这被评估为WHERE name LIKE '%bread%',这意味着它将匹配任何包含面包的东西。它不会将其评估为一个词。如果您只是添加了空格,它将不会匹配以面包开头或结尾的任何内容。 John Roca 用正则表达式给出了一个很好的解决方案。
  • @JohnRoca 谢谢。它工作
  • @SSuhat 你可以将我的答案标记为正确!

标签: php laravel


【解决方案1】:

您可能想试试这个 SELECT * FROM products WHERE product_name RLIKE "[[:<:>:]]"; Same Question Here

【讨论】:

    【解决方案2】:

    在 Laravel Eloquent 中,您可以像下面这样操作。

    $query->where('name', 'RLIKE ', "[[:<:]]"$words"[[:>:]]");
    

    在原始查询中,您可以像这样搜索它。

    SELECT * FROM categories WHERE name RLIKE "[[:<:]]categoryNameHere[[:>:]]";
    

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 2017-08-28
      相关资源
      最近更新 更多