Php 从laravel中的集合获取所有对象
我在laravel中使用Ajax创建边栏过滤器搜索,过滤带有等级的产品。用户选中一些复选框并将其与以下Ajax代码一起发送: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) {
$(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);
}]);