我在使用Laravel的搜索查询时遇到了问题。
$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}]
预期结果为空。
我希望搜索名称和位置名称列以给定的单词开头,不包含该单词。
如何实现该搜索方法?
答案 0 :(得分:0)
目前,您在单词之前和之后使用MySQL通配符('%')。这将匹配包含单词的任何内容。如果你只是想让它从单词开始,你只想在最后匹配通配符而不是开头。
试试这个。
$words = 'as';
$query = Category::where('name', 'like', $words . '%')
-> orWhere('location_name', 'like', $words .'%')
-> pluck('name', 'location_name');
答案 1 :(得分:0)
这是解决方案:
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 . '%');
});