Php Laravel在两列上搜索特定的包含词
我在使用Laravel where和like搜索查询时遇到了一个问题Php Laravel在两列上搜索特定的包含词,php,laravel,Php,Laravel,我在使用Laravel where和like搜索查询时遇到了一个问题 $words = 'as'; $query = Category::where(function ($query) use ($words) { $query->where('name', 'like', $words. '%') ->orWhere('name', 'like', '%'. $words . '%')
$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}]
预期结果为空
我希望搜索名称和位置名称列以给定单词开头,但不包含该单词
如何实现该搜索方法?目前,您正在word前后使用MySQL通配符(“%”)。这将匹配包含单词的任何内容。如果您只想让它以单词开头,那么您只想在结尾而不是开头匹配通配符 试试这个
$words = 'as';
$query = Category::where('name', 'like', $words . '%')
-> orWhere('location_name', 'like', $words .'%')
-> pluck('name', 'location_name');
目前,您正在word前后使用MySQL通配符(“%”)。这将匹配包含单词的任何内容。如果您只想让它以单词开头,那么您只想在结尾而不是开头匹配通配符 试试这个
$words = 'as';
$query = Category::where('name', 'like', $words . '%')
-> orWhere('location_name', 'like', $words .'%')
-> pluck('name', 'location_name');
以下是解决方案:
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 . '%');
});
以下是解决方案:
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 . '%');
});
为您提供了以结尾而不是以开头的方法-请尝试正确的答案。如果名称为“焦糖”,则它会起作用。它将返回空。我使用高级where from laravelHad为您提供的ends with not Start with的方法找到了解决方案-请尝试正确的答案。如果名称为“焦糖”,它将起作用。它会让我返回空的。我发现解决方案使用的是来自Laraveloyou的advanced where,你仍然在关键字前包含一个通配符。在您的第一个示例中,搜索“Spa”(注意空格)将返回一个您表示不想要的结果。您仍然在关键字前包含一个通配符。在您的第一个示例中,搜索“Spa”(注意空格)将返回一个您表示不想要的结果。