将SQL搜索查询转换为口才查询

时间:2019-01-01 19:21:20

标签: php laravel eloquent laravel-query-builder

我想要以下查询。

select * from `items` 
    where (`item_name` LIKE 'foo' or `item_description` LIKE 'foo') 
    and `item_type` = 'type1' 

翻译成口才。我提出了以下声明:

$items = Item::where('item_type', '=', 'type1')
    ->orWhere('item_name','LIKE','%'.$q.'%')
    ->orWhere('item_description','LIKE','%'.$q.'%')
    ->sortable(['id' => 'desc'])
    ->paginate(10);

在以上代码段中,$q将是foo(这是一个搜索查询)。

问题在于,这并不能完全返回我想要的内容,因为它还会返回属于另一个item_type而不是我的示例中的type1的项目。

如何将上述SQL查询转换为口才查询,使其仅返回包含foo且类型仅为Type1的项目?

1 个答案:

答案 0 :(得分:3)

尝试一下。您需要嵌套的where闭包:

$items = Item::where('item_type', '=', 'type1')
                ->where(function($query) use ($q) {
                    $query->where('item_name','LIKE','%'.$q.'%')
                          ->orWhere('item_description','LIKE','%'.$q.'%');
                })
           ->sortable(['id' => 'desc'])
           ->paginate(10);