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 <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;
}
}
фильтр по проекту работает.. проблема в том, что когда я добавляю другой фильтр с тем же кодом в контроллер и vue js он фильтрует с другим результатом, поэтому я хочу, чтобы имя поставщика и проект были одинаковыми
затем используйте ->where()->where()
как цепной фильтр
как насчет vue js, какое имя в v-модели я буду использовать??
Как я могу объединить значение 2 поля выбора?
почему 2 окна выбора вы объедините? отправить их как разные параметры и запросить в контроллере
Так разные параметры?? как я могу поставить это на это axios.get('/api/item_history_filter_by_project?q='+ query)
@NotaPro просто заставит 2 получить детскую коляску и передать значение для каждого соответствия обоим фильтрам, обработать его в контроллере в соответствии с
@GauravGupta, как я могу сделать это в аксиомах?
@NotaPro что-то вроде этого axios.get('/api/item_history_filter_by_project?q='+ query +'&q2='+query2 )
он использует модель для таблицы 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
Спасибо, бро, что дал мне идею, как это сделать! мой код немного отличается от вашего, но теперь он работает!
затем добавьте еще один фильтр, в чем проблема? ты идешь сюда