首页 > 解决方案 > Laravel 计数问题

问题描述

我正在尝试通过复选框和条件进行搜索,但我得到了这个错误作为回报:

count(): Parameter must be an array or an object that implements Countable

逻辑

  1. 我可以选择 1 个或多个选项
  2. 在后端检查选择了哪些选项
  3. 取决于返回结果的种类

代码

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>

标签: phplaravelcount

解决方案


解决了

更改计数已解决问题

elseif($request->has['brands']){

PS:基于我拥有的 3 个不同的函数,它们返回我的搜索数据我有混合的结果,但它与这个问题无关。count错误已解决,因此我将其标记为已解决。

感谢miken32


推荐阅读