Laravel, используя SQL с оператором «И», с условиями - PullRequest
0 голосов
/ 17 января 2019

У меня возникла проблема с Laravel, так как я новичок в этом, я пытаюсь что-то, а что-то все еще не работает.

У меня есть функция поиска, которая, просматривая пользователей, используя имя, специализацию пользователя или его местоположение, функция работает, если вы заполняете только один ввод, если вы начинаете заполнять второй ввод, он показывает первое условие, которое закодировано в контроллере.

Пример:

если я поставлю

Имя: Специальность: Расположение: Новый

Это показывает мне всех, кто живет в городах, начиная с «Нового», но если я это сделаю

Имя: Мария Специальность: Расположение: Новый

Здесь показаны все, кого зовут Мария, или, я хочу, чтобы «Мария» жила в городах, начинающихся с «Новый»

Так что я ищу, как заставить мой код работать с этим, делая if внутри if, создавая двойное условие, но так как я с laravel, у меня проблемы с этим (моя версия 5.0, я пойду на обновление после эта ошибка устранена)

Вот часть, где я застрял, с вещами, которые я пробовал,

if($attributs['specialty'] != "") {
        $users = User::where('status_user', '=', '1')
        ->where('specialty_id', $attributs['specialty'])
        ->where('city', 'LIKE', '%'.$attributs['locality'].'%')  //;
      /*  if($attributs['name']!= ""){
            $query->where(function ($query) use ($name){
                $query->where(('CONCAT(lastname, " ", firstname)'), 'LIKE', $name.'%')
                ->orWhere(('CONCAT(firstname, " ", lastname)'), 'LIKE', $name.'%');
            })
        }
        ->where('address', 'LIKE', '%'.$attributs['locality'].'%')
        ->where(DB::raw('CONCAT(address, " ", postal_code, " ", city)'), 'LIKE', '%'.$address.'%')*/

        ->confirmed()
        ->get();
    }

    else if($attributs['name'] != ""){
        $users = User::where(function ($query) use ($name) {
            $query->where(function ($query) use ($name) {
                $query->where(DB::raw('CONCAT(lastname, " ", firstname)'), 'LIKE', $name.'%')
                    ->orWhere(DB::raw('CONCAT(firstname, " ", lastname)'), 'LIKE', $name.'%');
            })
            ->where('status_user', '=', '1')
            ->confirmed();
        })
        ->orWhere(function ($query) use ($name) {
            $query->where(function ($query) use ($name) {
                $query->where(DB::raw('CONCAT(lastname, " ", firstname)'), 'LIKE', $name.'%')
                    ->orWhere(DB::raw('CONCAT(firstname, " ", lastname)'), 'LIKE', $name.'%');
            })

            ->where('status_user', '=', '1')
            ->where('invite', '=', '1');
        })

        ->get();
    }


    else if($attributs['address'] != ""){

        $users = User::where('status_user', '=', '1')
        ->where('address', 'LIKE', '%'.$attributs['locality'].'%')
        ->where(DB::raw('CONCAT(address, " ", postal_code, " ", city)'), 'LIKE', '%'.$address.'%')
        ->confirmed()
        ->get();
    }

Заранее спасибо, прошло уже несколько дней, как я нахожусь на нем> <</p>

Редактировать: Вот еще немного информации, так как это не так ясно, извините за это

Я хочу сделать множественный поиск, код, который я вам представляю, работает, но не предоставляет множественный поиск, я попытался сделать, если с несколькими условиями, и это не работает, я попытался сделать несколько, где предложение where, если внутри из первого, если, и это тоже не работает, так что вот я, большое спасибо заранее, но я все еще застрял ^^ '

1 Ответ

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

Попробуйте when() условный оператор. https://laravel.com/docs/5.7/queries#conditional-clauses

$users = User::when($attributs['specialty'] != "", function($q){
                      return $q->where('status_user', '=', '1')
                              ->where('specialty_id', $attributs['specialty'])
                              ->where('city', 'LIKE', '%'.$attributs['locality'].'%')
                              ->confirmed();
                    })
                    ->when($attributs['name'] != "", function($q){
                      return $q->where(function ($query) use ($name) {
                                  $query->where(function ($query) use ($name) {
                                      $query->where(DB::raw('CONCAT(lastname, " ", firstname)'), 'LIKE', $name.'%')
                                          ->orWhere(DB::raw('CONCAT(firstname, " ", lastname)'), 'LIKE', $name.'%');
                                  })
                                  ->where('status_user', '=', '1')
                                  ->confirmed();
                              })
                              ->orWhere(function ($query) use ($name) {
                                  $query->where(function ($query) use ($name) {
                                      $query->where(DB::raw('CONCAT(lastname, " ", firstname)'), 'LIKE', $name.'%')
                                          ->orWhere(DB::raw('CONCAT(firstname, " ", lastname)'), 'LIKE', $name.'%');
                                  })

                                  ->where('status_user', '=', '1')
                                  ->where('invite', '=', '1');
                              })
                    })
                    ->when($attributs['address'] != "", function($q){
                      return $q->where('status_user', '=', '1')
                              ->where('address', 'LIKE', '%'.$attributs['locality'].'%')
                              ->where(DB::raw('CONCAT(address, " ", postal_code, " ", city)'), 'LIKE', '%'.$address.'%')
                              ->confirmed();
                    })
                    ->get();

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