目前我在Laravel的SQL查询中苦苦挣扎。
我有一个包含6个下拉列表的表单,我通过get发送到图像控制器。根据我将发送给控制器的内容,查询应该更改。
如果a是"空" (value =" leer")这应该从查询中排除。
这是我的HTML:
UIPopoverController
我通过路线发送此表格
<form action="/filter" method="get">
{{csrf_field()}}
<div class="form-group">
<label for="brand">Brand</label>
<select class="form-control" id="brand" name="brand">
<option value="leer"></option>
@foreach($brands as $brand)
<option value="{{$brand->brand}}">{{$brand->brand}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="color">Color</label>
<select class="form-control" id="color" name="color">
<option value="leer"></option>
@foreach($colors as $color)
<option value="{{$color->color}}">{{$color->color}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="style">Style</label>
<select class="form-control" id="style" name="style">
<option value="leer"></option>
@foreach($styles as $style)
<option value="{{$style->style}}">{{$style->style}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="material">Material</label>
<select class="form-control" id="material" name="material">
<option value="leer"></option>
@foreach($materials as $material)
<option value="{{$material->material}}">{{$material->material}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="shape">Shape</label>
<select class="form-control" id="shape" name="shape">
<option value="leer"></option>
@foreach($shapes as $shape)
<option value="{{$shape->shape}}">{{$shape->shape}}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="year">Year</label>
<select class="form-control" id="year" name="year">
<option value="leer"></option>
@foreach($years as $year)
<option value="{{$year->year}}">{{$year->year}}</option>
@endforeach
</select>
</div>
<input type="submit" class="btn" value="Filter">
<button type="button" class="btn" data-dismiss="modal">Close
</button>
</form>
这是我的控制器函数,where子句应该是空的defaultif在表单中没有选择任何东西。如果您选择从品牌下拉列表和颜色下拉列表中选择somtehing,查询应该看起来像([[&#39;品牌&#39;,$品牌],[&#39;颜色&#39;,$ color] ]) - &GT;分页(12);
Route::get('/filter', 'ImagesController@filter');
有时它有效,但我认为它是偶然的,显然它不起作用。
我真的很感谢你的帮助。
非常感谢Lars。
答案 0 :(得分:1)
你需要在where子句之后调用paginate。构建器对象上的分页创建一个LengthAwarePaginator对象。调用此paginator的地方会导致分页集合中的某个位置(通过魔术方法__call),这不是预期的响应。
尝试:
$imagesQuery = DB::table('images')->select('brand', 'color', 'style', 'material', 'shape', 'year', 'id', 'path', 'created_at')->where('year',$year);
if ($brand == 'leer') {
$imagesQuery->where('brand', '=', $brand);
}
if ($color == 'leer') {
$imagesQuery->where('color', '=', $color);
}
if ($style == 'leer') {
$imagesQuery->where('style', '=', $style);
}
if ($material == 'leer') {
$imagesQuery->where('material', '=', $material);
}
if ($shape == 'leer') {
$imagesQuery->where('shape', '=', $shape);
}
if ($year == 'leer') {
$imagesQuery->where('year', '=', $year);
}
$images = $imagesQuery->paginate(12);
return view('index')->with(compact('images'));