Поисковый запрос Laravel с двумя условиями - PullRequest
0 голосов
/ 08 января 2019

Извинения, если название неясно, я не знаю, как это сказать ..

Я создаю функцию поиска для фильтрации заказов. Каждому заказу присваивается идентификатор пользователя или родительский идентификатор (если пользователь является дочерним пользователем), который используется для связи заказов с пользователями.

Например: идентификатор пользователя, имя, продукт, доставка.

Моя проблема в том, что поиск по имени и т. Д. Будет возвращать все результаты с этим именем независимо от того, связан ли вы с идентификатором.

Так что мне по сути нужно: где идентификатор пользователя или парентид = текущий идентификатор пользователя с последующими условиями поиска: имя в другом месте, продукт в другом месте или доставка в другое место = условие поиска.

В настоящее время у меня это работает, проверяя БД на все совпадения с поисковыми терминами, а затем сбрасывая данные в моем контроллере, чтобы вывести только те, которые соответствуют идентификатору пользователя или парентиде. Есть лучший способ сделать это?

Контроллер заказа

$data = app('App\Http\Controllers\DbController')->getordersbysearch($search);
        foreach($data as $row => $key){
        if($key->Userid != $id || $key->parentid != $id){
            unset($data[$row]);                
        }
        else{
            $key->Response = json_decode($key->Response);
        }

dbcontroller

         public function getordersbysearch($search){
    $result = DB::table('orders')->where("Name", 'like', '%' . $search['search'] . '%')->orWhere("product", 'like', '%' . $search['search'] . '%')->orWhere("delivery", 'like', '%' . $search['search'] . '%')->get();
    return $result;
}   

1 Ответ

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

Отправить идентификатор функции:

$data = app('App\Http\Controllers\DbController')->getordersbysearch($search, $id);

Затем измените вашу функцию, чтобы использовать этот идентификатор:

public function getordersbysearch($search, $id) {
    $result = DB::table('orders')
        ->where(function($q) use ($id) {
            $q->where('parent_id',$id)
              ->orWhere('user_id',$id);
         })->where(function($q) use ($search) {
            $q->where("Name", 'like', '%' . $search['search'] . '%')
              ->orWhere("product", 'like', '%' . $search['search'] . '%')
              ->orWhere("delivery", 'like', '%' . $search['search'] . '%');
         })->get();
    return $result;
}

По моему мнению, такого рода контроллер не должен существовать. «DbController» должен быть другого уровня, такого как Сервис или Модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...