Перевести поисковый запрос SQL в красноречивый запрос - PullRequest
0 голосов
/ 01 января 2019

Я хотел бы получить следующий запрос.

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

Переведено в Eloquent.Я пришел к следующему утверждению:

$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 в запрос Eloquent, чтобы он тольковозвращает элементы, содержащие foo и имеющие тип Type1 только?

1 Ответ

0 голосов
/ 01 января 2019

Попробуй это.Вам нужно вложенное 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);
...