2016-10-02 4 views
0

내 자동차 카탈로그에 AJAX 필터를 만들려고하면 "SALES_NAME을 (를) 요청하면 필터링 할 것입니다." 그것을하는 방법을 이해하지 못합니다.Laravel 5.2 여러 매개 변수로 필터링하는 AJAX

저는 제조업체, 모델, 소유자가 있습니다. 나는 그들 중 누구라도 자동차를 걸러 내고 싶다. 내가 예를 들어 소유자를 하나만 선택하면 - 내가 Toyota를 선택하면 소유자의 모든 자동차를 반환합니다 - 모든 Toyotas 또는 소유자 이름 Bob의 모든 Toyotas를 예로들 수 있습니다.

{!! Form::open(['id'=>'filter']) !!} 
{{csrf_field()}} 
<div class="form-group col-sm-2"> 
    {!! Form::select('sales_id', ['' => 'Owner'] + $sales, null, ['class'=>'form-control', 'id'=>'sales_id']) !!} 
</div> 
<div class="form-group col-sm-2"> 
    {!! Form::select('manufacturer_id', ['' => 'Manufacturer'] + $manufacturers, null, ['class'=>'form-control', 'id'=>'manufacturer_id']) !!} 
</div> 
<div class="form-group col-sm-1"> 
    <button type="button" class="btn btn-start" data-toggle="modal" data-target="#addmanufacturer "> 
     <i class="fa fa-plus" aria-hidden="true"></i> 
    </button> 
</div> 
<div class="form-group col-sm-2"> 
    {!! Form::select('model_id', ['' => 'Model'], null, ['class'=>'form-control', 'id'=>'model_id']) !!} 
</div> 
<div class="form-group col-sm-1"> 
    <button type="button" class="btn btn-start" data-toggle="modal" data-target="#addmodel"> 
     <i class="fa fa-plus" aria-hidden="true"></i> 
    </button> 
</div> 
<button type="submit" class="btn"><i class="fa fa-search" aria-hidden="true"></i></button> 
{!! Form::close() !!} 

JS :

$('#manufacturer_id').on('change', function(e){ 
     var man_id = e.target.value; 
     $.get('/admin/getmodels/models?man_id=' + man_id, function(data){ 
      $('#model_id').empty(); 
      $.each(data, function(index, model){ 
       $('#model_id').append('<option value="' + model.id+'">' 
         + model.name + ' ' + model.year + '</option>'); 
      }); 
     }); 
    }); 

    $('#filter').submit(function(event) { 
     event.preventDefault(); 
     $('#cars').empty(); 
     $.post('/admin/getmodels/carfilter', $('#filter').serialize(), function (cars) { 
       $.each(cars, function (index, car) { 
        $.post('/admin/getmodels/car', {car_id: car.id}, function (car) { 
         $('#cars').append('<div class="col-sm-2" id="car'+car.id+'"></div>'); 
         if (car.photos.length > 0) { 
          $.each(car.photos, function (index, photo) { 
           if (index == 0) { 
            $('#car' + car.id).append('<img class="img img-responsive" src="' + photo.file + '">').append('<div class="header header4 text-center">'+car.manufacturer.name+' '+car.model.name+' '+car.model.year+'</div>'); 
           } 
          }); 
         } else { 
          $.each(car.modelphoto, function (index, photo) { 
           if (index == 0) { 
            $('#car' + car.id).append('<img class="img img-responsive" src="' + photo.file + '">').append('<div class="header header4 text-center">'+car.manufacturer.name+' '+car.model.name+' '+car.model.year+'</div>'); 
           } 
          }); 
         } 
        }); 
       }); 
      }); 
     }); 

컨트롤러, 그 i'am 있는지 정확하지,하지만 난이 원하는 것 같습니다됩니다 : 여기에 내 시야의 일부이다

public function postCarfilter(Request $request) 
{ 
    $cars = Car::where('manufacturer_id', $request->manufacturer_id)->where('model_id',$request->model_id)->get(); 
    if ($request->sales_id != ""){ 
     $cars = $cars->where('user_id', $request->sales_id)->get(); 
    } 
    return Response::json($cars); 
} 

모델 :

class Car extends Model 
{ 
public function user(){ 
    return $this->belongsTo('App\User'); 
} 

public function manufacturer(){ 
    return $this->belongsTo('App\Manufacturer'); 
} 

public function model(){ 
    return $this->belongsTo('App\CarModel'); 
} 

public function photos(){ 
    return $this->morphMany('App\Photo', 'imageable'); 
} 

} 

class User extends Authenticatable 
{ 
public function car() { 
    return $this->hasMany('App\Car'); 
} 
} 

class Manufacturer extends Model 
{ 

public function car() { 
    return $this->hasMany('App\Car'); 
} 

public function model() { 
    return $this->hasMany('App\CarModel'); 
} 
} 

class CarModel extends Model 
{ 

public function car() { 
    return $this->hasMany('App\Car'); 
} 

public function manufacturer(){ 
    return $this->belongsTo('App\Manufacturer'); 
} 
} 

답변

0

좋아요, 알겠습니다. O를 사용하여 쿼리 빌더, 그래서 새로운 컨트롤러 :

어쩌면
public function postCarfilter(Request $request) 
{ 

    $cars = DB::table('cars'); 
    if ($request->sales_id != ""){ 
     $cars->where('user_id', $request->sales_id); 
    } 

    if ($request->manufacturer_id != ""){ 
     $cars->where('manufacturer_id', $request->manufacturer_id); 
    } 

    if ($request->model_id != ""){ 
     $cars->where('model_id', $request->model_id); 
    } 

    return Response::json($cars->get()); 
} 

이 누군가

에 도움이 될 것입니다