php - 从 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_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,
]);
而在Main.blade.php
我试图让产品属性这样的代码:
@foreach($products as $product)
{{$product->id}}
@endforeach
但我给出了这个错误:
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();
推荐阅读
- php - 使用数组根据字符串 % 更改颜色块
- ios - 生成的 QR 图像的 UIImagePNGRepresentation 始终为零
- ruby-on-rails - 使用 Ransack gem 和 EasyAutoComplete 进行全局自动完成搜索(搜索查询不起作用)
- python-3.x - 使用用户输入更新嵌套列表
- minecraft - 1.7.10 Minecraft Forge 编译错误
- python - 合并多个 XML 文件
- laravel - Laravel Homestead & nginx - 无法使用请求的资源作为变量
- f# - F# 4.5 中的 byref 返回
- javascript - Firebase Firestore 和云函数 - Promise.all() 不返回 QuerySnapshot
- webdriver-io - WDIO,不断收到此错误:java.net.SocketException: Connection reset by peer