Laravel 在 2 列上搜索特定的包含单词
Posted
技术标签:
【中文标题】Laravel 在 2 列上搜索特定的包含单词【英文标题】:Laravel search for specific contain word on 2 columns 【发布时间】:2016-09-01 09:49:21 【问题描述】:我在使用 Laravel where 和 like 搜索查询时遇到问题。
$words = 'as';
$query = Category::where(function ($query) use ($words)
$query->where('name', 'like', $words. '%')
->orWhere('name', 'like', '%'. $words . '%')
->orWhere('location_name', 'like', $words.'%')
->orWhere('location_name', 'like', '%'. $words . '%')
)->pluck('name', 'location_name');
结果是:
[name: Chocolate Spa, location_name: Throne Glass]
预期结果为空。
我希望它搜索名称和位置名称列以给定单词开头,但不包含该单词。
我怎样才能实现这种搜索方法?
【问题讨论】:
【参考方案1】:这里是解决方案:
Category::where(function ($q) use ($keywords)
$q->where('name', 'like', $keywords . '%')
->orWhere('name', 'like', '% ' . $keywords . '%');
);
->orWhere(function ($q) use ($keywords)
$q->where('location_name', 'like', $keywords . '%')
->orWhere('location_name', 'like', '% ' . $keywords . '%');
);
【讨论】:
您仍然在关键字前包含通配符。在您的第一个示例中,搜索“Spa”(注意空格)将返回您不想要的结果。【参考方案2】:目前,您在单词前后使用 mysql 通配符 ('%')。这将匹配包含该单词的任何内容。如果你只想让它以单词开头,你只想匹配末尾的通配符而不是开头。
试试这个。
$words = 'as';
$query = Category::where('name', 'like', $words . '%')
-> orWhere('location_name', 'like', $words .'%')
-> pluck('name', 'location_name');
【讨论】:
已经为您提供了以不以开头为结尾的方法 - 请尝试更正的答案。 它可以工作,但是如果名称是“焦糖”。它会让我空虚。 我使用来自 laravel 的高级 where 找到了解决方案以上是关于Laravel 在 2 列上搜索特定的包含单词的主要内容,如果未能解决你的问题,请参考以下文章
使用 Vuejs 填充特定输入 - 来自数据库的 Laravel