Php 从laravel中的集合获取所有对象

Php 从laravel中的集合获取所有对象,php,ajax,laravel,collections,Php,Ajax,Laravel,Collections,我在laravel中使用Ajax创建边栏过滤器搜索,过滤带有等级的产品。用户选中一些复选框并将其与以下Ajax代码一起发送: $(document).ready(function (event) { $('#Filter_Result').click(function (event) { var grades = []; $('input[id="grade"]:checked').each(function (index, elem) {

我在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\u id
grade\u name
列和
products
表格,我的控制器在这里:

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,  
    ]);
但我给出了一个错误:

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

如何解决此问题?

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

$arr[] = Product::where('id',$product_id[$j-1])->first();
尽管如此,如果您已经有一个产品ID数组,为什么不运行一个查询来获取产品集合呢

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

我认为您只是创建了一个QueryBuilder集合

在本部分:

$arr[] = Product::where('id',$product_id[$j-1]);
这部分生成一个QueryBuilder,您只需创建它的一个集合。尝试将其更改为:

$arr[] = Product::where('id',$product_id[$j-1])->get();
但如果您想获得具有特定等级名称的产品,请尝试以下方法:

Product::with(['product_grade' => function($query) use ($value) {
    $query->where('grade_name', $value);
}]);

(这是考虑到您已在模型中设置了关系)

谢谢,但我尝试了您的答案,并给出了此错误
为foreach()提供的无效参数。
我测试了您的第一个答案,但不起作用,但我如何在您的模型中使用第二个答案,如果您有hasOne,hasMany,belongsTo关系,那么这应该起作用
Product::with(['product_grade' => function($query) use ($value) {
    $query->where('grade_name', $value);
}]);