#laravel #laravel-5.2
#laravel #laravel-5
Вопрос:
Я пытаюсь создать AJAX-фильтр для своего каталога автомобилей, сделать логику: «Если у меня есть SALES_NAME в запросе, я отфильтрую его (добавлю в фильтр из БД)», но я не понимаю, как это сделать.
У меня есть параметры — Производитель, Модель, Владелец. Я хочу фильтровать автомобили по любому из них. Если я выберу только один, например, owner — будут возвращены все автомобили владельца, если я выберу Toyota — все toyotas или, например, все Toyotas с именами владельцев Bob. Вот часть моего мнения:
{!! 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>');
}
});
}
});
});
});
});
Контроллер, я уверен, что это неправильно, но похоже, что я хочу сделать:
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('AppUser');
}
public function manufacturer (){
return $this->belongsTo('AppManufacturer');
}
public function model(){
return $this->belongsTo('AppCarModel');
}
public function photos(){
return $this->morphMany('AppPhoto', 'imageable');
}
}
class User extends Authenticatable
{
public function car() {
return $this->hasMany('AppCar');
}
}
class Manufacturer extends Model
{
public function car() {
return $this->hasMany('AppCar');
}
public function model() {
return $this->hasMany('AppCarModel');
}
}
class CarModel extends Model
{
public function car() {
return $this->hasMany('AppCar');
}
public function manufacturer(){
return $this->belongsTo('AppManufacturer');
}
}
Ответ №1:
Хорошо, я понял, я должен использовать конструктор запросов, поэтому новый контроллер:
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());
}
Может быть, это будет кому-то полезно