Как запрашивать поиск с помощью нескольких входных данных формы

#laravel

#laravel

Вопрос:

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

Я пробовал этот код, но он просто возвращает оператор запроса, а не сам результат

   $employees = DB::table('job_requests')
            ->select('job_requests.*','user_infos.*')
            ->leftJoin('user_infos','user_infos.user_id','=','job_requests.user_id')
            ->where('user_infos.role','=','0');

  if ($job_name) {
     $employees->where('job_requests.job_name','like',"%$job_name%");
  }
  if ($location) {
     $employees->where('job_requests.location','=',$location);
  }
  if ($gender) {
     $employees->where('user_infos.gender','=',$gender);
  }
  if ($salary) {
     $employees->where('job_requests.salary','<=',$salary);
  }
  if ($start_date amp;amp; $end_date) {
     $employees->whereBetween('end_date',array($start_date,$end_date));
  }
  $employees->get();
  

Я ожидаю, что результат будет результатом запроса

Комментарии:

1. пожалуйста, покажите весь код функции

2. Это весь код

3. является ли $job_name и остальные переменные из запроса?

4. Можете ли вы показать нам, какие ошибки вы видите?

Ответ №1:

Я думаю, вам следует использовать этот код

 $employees = DB::table('job_requests')
            ->select('job_requests.*','user_infos.*')
            ->leftJoin('user_infos','user_infos.user_id','=','job_requests.user_id')
            ->where('user_infos.role','=','0');

  if (isset($job_name) amp;amp; !empty($job_name)) {
     $employees->andWhere('job_requests.job_name','like',"%$job_name%");
  }
  if (isset($location) amp;amp; !empty($location)) {
     $employees->andWhere('job_requests.location','=',$location);
  }
  if (isset($gender) amp;amp; !empty($gender)) {
     $employees->andWhere('user_infos.gender','=',$gender);
  }
  if (isset($salary) amp;amp; !empty($salary)) {
     $employees->andWhere('job_requests.salary','<=',$salary);
  }
  if (isset($start_date) amp;amp; !empty($start_date) amp;amp; isset($end_date) amp;amp; !empty($end_date)) {
     $employees->whereBetween('end_date',array($start_date,$end_date));
  }
  $employees->get();
  

Надеюсь, это решит вашу проблему.

Ответ №2:

 $employees = DB::table('job_requests')
            ->select('job_requests.*','user_infos.*')
            ->leftJoin('user_infos','user_infos.user_id','=','job_requests.user_id')
            ->where('user_infos.role','=','0');

  if (isset($job_name) amp;amp; !empty($job_name)) {
    $employees = $employees->andWhere('job_requests.job_name','like',"%$job_name%");
  }
  if (isset($location) amp;amp; !empty($location)) {
     $employees = $employees->andWhere('job_requests.location','=',$location);
  }
  if (isset($gender) amp;amp; !empty($gender)) {
   $employees =  $employees->andWhere('user_infos.gender','=',$gender);
  }
  if (isset($salary) amp;amp; !empty($salary)) {
    $employees = $employees->andWhere('job_requests.salary','<=',$salary);
  }
  if (isset($start_date) amp;amp; !empty($start_date) amp;amp; isset($end_date) amp;amp; !empty($end_date)) {
    $employees = $employees->whereBetween('end_date',array($start_date,$end_date));
  }
  $employees->get();
  

Ответ №3:

Пожалуйста, попробуйте указать, в каком end_date поле таблицы находится.