Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel在两列上搜索特定的包含词_Php_Laravel - Fatal编程技术网

Php Laravel在两列上搜索特定的包含词

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 . '%')

我在使用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}]
预期结果为空

我希望搜索名称和位置名称列以给定单词开头,但不包含该单词


如何实现该搜索方法?

目前,您正在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”(注意空格)将返回一个您表示不想要的结果。