【问题标题】:Laravel search column starts with the given wordLaravel 搜索列以给定单词开头
【发布时间】:2016-07-14 15:06:43
【问题描述】:

我在使用 Laravel where 和 like 搜索查询时遇到问题。

$words = 'pa';

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

结果是:

[{Chocolate Spa, Zen Spa, Disco Party}]

预期的结果只有Party

我希望它的搜索名称列以给定单词开头,但不包含该单词。

我怎样才能实现这种搜索方法?

【问题讨论】:

  • 只需删除 where() 方法,它就会留下:$query->where('name', 'like', $words . '%')
  • @iam-decoder 我试过你的方法。它让我空虚。
  • 不可能,该查询会产生类似SELECT name FROM tablename WHERE name LIKE 'pa%' 的结果,这是一个正确的查询
  • @iam-decoder 可以吗,因为有 '' 它返回空?
  • 而不是->pluck('name'),你能做到->toSql() 并在此处粘贴输出吗?

标签: php laravel


【解决方案1】:

这应该可行:

$query = Category::where('name', 'like', $words.'%')
    ->orWhere('name', 'like', '% '.$words.'%'))
    ->pluck('name');

【讨论】:

  • 不需要ucfirst() 默认情况下MySql会以不区分大小写的方式进行搜索
  • 没有必要,但请随心所欲:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-12
相关资源
最近更新 更多