Как фильтровать с 2 или более условиями в laravel и vue js

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

  <div class = "col-md-12"> 
       <div class = "row ml-1"> 
            <span style = "color:#424242;font-size:15px; margin-right:5px;">Project:</span>
             <select class = "form-control form-control-sm" style = "padding:0;
            margin-bottom:5px; height:25px; width:120px;" v-model = "filterByProject" 
       @change = "filterproject">
               <option>ABC</option>
                </select>
          
         // Supplier name
      <select class = "form-control form-control-sm" style = "padding:0;
            margin-bottom:5px; height:25px; width:120px;"
               <option>Steel Inc</option>
               <option>L Inc</option>
                </select>

                </div>     
            <div class = "card card-primary">
              <div class = "card-header"  style = "padding-bottom:0px;">
                <h3 class = "card-title">Item list&nbsp<span class = "fas fa-bookmark"></span>                
                </h3>
              </div>
              <!-- /.card-header -->
              <div class = "card-body table-responsive p-0">
                <table class = "table table-hover table-bordered table-sm" >
                  <thead>
                    <tr>
                      <th scope = "col">#</th>
                      <th scope = "col">PO DATE</th>
                      <th scope = "col">ITM</th>
                      <th scope = "col">PRJ</th>
                      <th scope = "col">SUPPLIER</th>
                
                    </tr>
                  </thead>
                  <tbody>
                    <tr v-for = "(fetch,count) in item">
                    <td style = "height:10px">{{count+1}}</td>
                    <td style = "height:10px">{{fetch.po_date}}</td>
                    <td style = "height:10px">{{fetch.project}}</td>
                    <td style = "height:10px">{{fetch.supplier}}</td>

                    </tr>
                  </tbody>                
                </table>
              </div>
              <!-- /.card-body --> 
                  <div class = "card-footer">       
            </div>
            </div>
            <!-- /.card -->
          </div>

Мой контроллер

общедоступная функция поиска () {

    if ($search = \Request::get('q')){


     $data = DB::table('po_items')->where('po_details.project_code', 'LIKE', "%$search%")
 
    ->leftjoin('po_details','po_items.po_id','=','po_details.po_id')
    ->leftjoin('project_info','po_details.project_code','=','project_info.project_code')
    ->leftjoin('master_supplier','po_details.supplier_code','=','master_supplier.supplier_code')
    ->select('po_items.*','po_details.*','po_details.created_at as po_date','project_info.project_name','master_supplier.supplier_name')
    ->get();
    return $data;

    }else{

        $data = DB::table('po_items')
        ->leftjoin('po_details','po_items.po_id','=','po_details.po_id')
        ->leftjoin('project_info','po_details.project_code','=','project_info.project_code')
        ->leftjoin('master_supplier','po_details.supplier_code','=','master_supplier.supplier_code')
        ->select('po_items.*','po_details.*','po_details.created_at as po_date','project_info.project_name','master_supplier.supplier_name')
        ->get();    
        return $data;

    }

}

затем добавьте еще один фильтр, в чем проблема? ты идешь сюда

Kamlesh Paul 10.12.2020 10:05

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

Not a Pro 10.12.2020 10:08

затем используйте ->where()->where() как цепной фильтр

Kamlesh Paul 10.12.2020 10:10

как насчет vue js, какое имя в v-модели я буду использовать??

Not a Pro 10.12.2020 10:11

Как я могу объединить значение 2 поля выбора?

Not a Pro 10.12.2020 10:12

почему 2 окна выбора вы объедините? отправить их как разные параметры и запросить в контроллере

Kamlesh Paul 10.12.2020 10:18

Так разные параметры?? как я могу поставить это на это axios.get('/api/item_history_filter_by_project?q='+ query)

Not a Pro 10.12.2020 10:19

@NotaPro просто заставит 2 получить детскую коляску и передать значение для каждого соответствия обоим фильтрам, обработать его в контроллере в соответствии с

Gaurav Gupta 10.12.2020 10:37

@GauravGupta, как я могу сделать это в аксиомах?

Not a Pro 11.12.2020 02:54

@NotaPro что-то вроде этого axios.get('/api/item_history_filter_by_project?q='+ query +'&q2='+query2 )

Gaurav Gupta 11.12.2020 04:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
10
1 459
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

он использует модель для таблицы PayrollOfficeDeail.php в приложении/Моделях laravel 8.x

use Illuminate\Database\Eloquent\Model
class payroll_office_detail extends Model{
   public scopeSearch(Builder $query,$fieldName,$fieldVal){
        return $query->where($fieldName,'=',$fieldVal);
   }
}

в файл контроллера добавить

public function search(Request $request){
$searchFieldName=$request->get('field');
$payroll_office_detail=payroll_office_detail::query();
$payroll_office_detail
   ->leftJoin()
//   -> ....


$payroll_office_detail->search($searchFieldName,'%'.$request->get('q').'%');

return $payroll_office_detail->get();
}
Ответ принят как подходящий

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

 public function customUserSearchv2(Request $request) {
        try {
            $the = new Profile();
            $the = $the->newQuery();

            $the->leftJoin('tbl1', 'tbl1.id', '=', 'profile.id');

            if ($request->has('thrapyType') && !empty($request->thrapyType)) {
                $the->where('profile.services', 'LIKE', '%' . $request->thrapyType . '%');
            }

            if ($request->has('the_name') && !empty($request->the_name)) {

                $full_name = explode(" ", $request->the_name);

                $f_name = $full_name[0];
                $the->where('profile.first_name', 'LIKE', '%' . $f_name . '%');
                if (count($full_name) > 1) {
                    $l_name = $full_name[1];
                    if (!empty($l_name)) {
                        $the->orWhere('profile.last_name', 'LIKE', '%' . $l_name . '%');
                    }
                }
            }
            if ($request->has('zipcode') && !empty($request->zipcode)) {
                $the->where('profile.office_address_zip', 'LIKE', '%' . $request->zipcode);
                //$the->orWhere('profile.secondary_address_zip', 'LIKE', '%' .$request->zipcode);
            }
            
            $result = $the->select('profile.*', 'tbl1.name', 'tbl1.email',)->orderBy('profile.id', 'DESC')
                    ->get();

            return apiSuccessHandler($result, 200, "SUCCESS", $request, 'Search completed successfully.');
        } catch (\Exception $e) {
            return apiErrorHandler(500, "INTERNAl SERVER ERROR", $e->getMessage() . ':' . "Server Error Please try after sometime.", $request);
        }
    }

Вью JS

<template>
                <label>User Name</label>
                <input type = "text" @keyup = "list($event)" name = "tname" v-model = "tname"/>
                
                
                <label>Provider</label>
                <select @change = "list($event)" name = "provider_type" v-model = "provider">
                  <option value selected>Select Provider</option>
                  <option v-for = "(ins,index) in provider_type.data" :key = "index" :value = "ins.provider_name">
                    {{ins.provider_name}}
                  </option>
                </select>

         <div class = "th-fimg" v-for = "(therapist,index) in filterList.data" :key = "index"></div>  
</template>

    <script>
    export default{
    data(){
    return{
      filtered_data: [],
    }
    }
    methods:{
          list(e) {
            let name = "";
              name = this.tname;
              provider = this.provider
            this.$axios
              .get("user/search/v2", {
                headers: apiConst._header,
                params: {
                  name:name,
                  provider: provider
                }
              })
              .then(rec => {
                if (rec.data.data.length <= 0) {
                  this.message = true;
                } else {
                  this.message = false;
                }
                this.filtered_data = rec.data;
              })
              .catch(err => {
                console.info("Filter Error : 207");
              });
          }
    }, computed: {
          filterList() {
            return this.filtered_data;
          }
        }
    }
    </script>

            

У меня проблема с доступом к моим параметрам. в моем контроллере $search = $request->project

Not a Pro 11.12.2020 03:53

Спасибо, бро, что дал мне идею, как это сделать! мой код немного отличается от вашего, но теперь он работает!

Not a Pro 11.12.2020 04:44

Другие вопросы по теме