Laravel 搜索列以给定单词开头

Posted

技术标签:

【中文标题】Laravel 搜索列以给定单词开头【英文标题】:Laravel search column starts with the given word 【发布时间】: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() 并在此处粘贴输出吗? 【参考方案1】:

这应该可行:

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

【讨论】:

不需要ucfirst() 默认情况下mysql会以不区分大小写的方式进行搜索 没有必要,但请随心所欲:P

以上是关于Laravel 搜索列以给定单词开头的主要内容,如果未能解决你的问题,请参考以下文章

laravel 搜索多个以空格分隔的单词

Laravel 在 2 列上搜索特定的包含单词

搜索 Meil​​isearch / Laravel Scout 中的所有单词

如何仅在 LIKE 查询 Laravel 中找到整个单词?

php--一些有用的Laravel辅助函数

Laravel 中的网络爬虫