我正在尝试使用主题过滤应用产品,我使用ajax进行过滤 将主题数组发送给控制器,并在控制器中尝试使用以下代码获取产品:
for($j=1;$j <=sizeof($request->subjects);$j++)
{
$product_id= Productsubject::where('subject', $request->subjects[$j - 1])-
>pluck('product_id');
$products = Product::whereIn('id',$product_id)->get();
}
echo $products;
当我跑步时,我只给产品提供主题数组的最新对象,
例如我的主题是[art,math]
,我只提供带有数学主题的产品,如何给所有带有美术和数学主题的产品?
答案 0 :(得分:1)
您正在运行新查询并在循环的每次迭代中覆盖产品。
您正在使用whereIn进行第二个查询。为什么不同时使用它并放弃循环呢?
$productIds = Productsubject::whereIn('subject', $request->subjects)->pluck('product_id');
$products = Product::whereIn('id', $productIds)->get();
答案 1 :(得分:0)
Devon的答案绝对是最简单的方法,但是如果您愿意,也可以使用子查询:
Product::whereIn('id', function($q) use ($request) {
$q->select('id')->from('product_subjects')->whereIn('subject', $request->subjects)
})->get();
答案 2 :(得分:0)
尝试一下:
$products = Product::whereHas('subjects', function($query) {
$query-> whereIn('subject', $request->get('subjects'));
})->get();