php - Laravel 计数问题
问题描述
我正在尝试通过复选框和条件进行搜索,但我得到了这个错误作为回报:
count(): Parameter must be an array or an object that implements Countable
逻辑
- 我可以选择 1 个或多个选项
- 在后端检查选择了哪些选项
- 取决于返回结果的种类
代码
controller
public function advancedsearch(Request $request) {
$options = Specification::whereHas('subspecifications')->with(['subspecifications' => function($query) {
$query->status('Active');
}])->get();
$brands = Brand::all();
$brandss = Input::has('brands') ? Input::get('brands') : [];
$suboption = Input::has('suboptions') ? (int)Input::get('suboptions') : [];
$min_price = Input::has('min_price') ? (int)Input::get('min_price') : null;
$max_price = Input::has('max_price') ? (int)Input::get('max_price') : null;
//codes
if(count($request['suboptions'])){
$products = DB::table('products')
->join('product_subspecification', function ($join) {
$suboption = Input::has('suboptions') ? Input::get('suboptions') : [];
$join->on('products.id', '=', 'product_subspecification.product_id')
->where('product_subspecification.subspecification_id', '=', $suboption);
})
->paginate(12);
}
elseif(count($request['brands'])){
$products = DB::table('products')
->whereIn('products.brand_id', $brandss)
->paginate(12);
}
elseif(count($request['min_price']) && count($request['max_price'])){
$products = DB::table('products')
->whereBetween('price', [$min_price, $max_price])
->paginate(12);
}
return view('front.advancesearch', compact('products', 'brands', 'options'));
}
上面的代码总结
我正在从数据库中获取所有品牌并检查是否只有 1 个品牌已选择或多个
$brands = Brand::all();
$brandss = Input::has('brands') ? Input::get('brands') : [];
然后我检查是否有任何品牌一般选择或没有选择count
并返回结果
elseif(count($request['brands'])){
$products = DB::table('products')
->whereIn('products.brand_id', $brandss)
->paginate(12);
}
但我收到上面分享的错误。
任何的想法?
更新
how my html look likes
how the result **dd** look like
array:4 [▼
"_token" => "Wqs9yzd5qwGtbv01asbCzsISeVQxHsCoWVQM1ifO"
"brands" => array:1 [▼
0 => "3"
]
"min_price" => null
"max_price" => null
]
Blade
<div class="checkbox">
@foreach($option->subspecifications as $suboption)
@if($option->title == 'Brand')
<label for="brands">
<input name="brands[]" type="checkbox" value="{{$suboption->id}}">
{{ucfirst($suboption->title)}}
</label>
@else
<label for="suboptions">
<input name="suboptions[]" type="checkbox" value="{{$suboption->id}}">
{{ucfirst($suboption->title)}}
</label>
@endif
@endforeach
</div>
解决方案
解决了
更改计数已解决问题
elseif($request->has['brands']){
PS:基于我拥有的 3 个不同的函数,它们返回我的搜索数据我有混合的结果,但它与这个问题无关。
count
错误已解决,因此我将其标记为已解决。
感谢miken32
推荐阅读
- python-3.x - 如何在键值对列表中找到值小于上一个的键?
- extjs - ExtJS Modern - 自动调整网格列
- python - 如何使单列中的两种不同日期格式唯一?
- javascript - 从 firebase onCall 云函数读取 Firestore 中的文档
- react-native - React Native 相机第一次工作,然后在 android 设备中不工作(黑屏)
- excel - 如何使用和 if 语句模拟排队论
- swift - 如何正确处理多个 if else 条件?
- mysql - 为什么我超出了双范围被破坏的范围错误?
- ios - Coredata 获取请求结果在每次请求后翻倍
- python - 无法在模板上显示数据库中的数据