首页 > 解决方案 > 从 laravel 中的集合中获取所有对象

问题描述

我在 laravel 中使用 Ajax 创建侧边栏过滤器搜索,过滤带有等级的产品。用户选择一些复选框并使用此 ajax 代码发送它们:

 $(document).ready(function (event) {
    $('#Filter_Result').click(function (event) {
        var grades = [];
        $('input[id="grade"]:checked').each(function (index, elem) {
            grades.push($(elem).val());
        });
        $.ajax({
            url: '/Products/Filter',
            type: 'get',
            data:{
                grades : grades,
            },
            dataType : 'html'
        })
            .done(function (response)
        {
            console.log(response);
            $('#Products').html(response);
        });
    });
});

我的表是productgrades和列和product_id表,我的控制器在这里:grade_nameproducts

if ($request->price =="" && is_null($request->subjects))
    {
        for ($i = 1; $i<= sizeof($request->grades); $i++) {
           $product_id= Productgrade::where('grade_name',$request->grades[$i- 
           1])->pluck('product_id');
           for($j=1;$j<=sizeof($product_id);$j++)
           {
              $arr[] = Product::where('id',$product_id[$j-1]);
           }
        }
    }
    $products = collect($arr);
    return view('Products.Main', [
        'products' => $products,  
    ]);

而在Main.blade.php我试图让产品属性这样的代码:

@foreach($products as $product)
{{$product->id}}
@endforeach

但我给出了这个错误:

Property [id] does not exist on this collection instance.

我怎样才能解决这个问题?

标签: phpajaxlaravelcollections

解决方案


您实际上并没有执行查询。您只是在创建一个查询构建器实例,您必须运行 first() 来获取第一个结果,或者运行 get() 来从查询构建器中获取一个集合。

$arr[] = Product::where('id',$product_id[$j-1])->first();

虽然,如果您已经有一系列产品 ID,为什么不只运行一个查询来获取产品集合呢?

$products = Product::whereIn('id', $product_id)->get();

推荐阅读