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

时间:2016-05-06 10:43:57

标签: php laravel

我在使用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}]

预期结果为空。

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

如何实现该搜索方法?

2 个答案:

答案 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 . '%');
});