使用Laravel中的数组过滤产品

时间:2018-08-03 19:27:20

标签: laravel filter

我正在尝试使用主题过滤应用产品,我使用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],我只提供带有数学主题的产品,如何给所有带有美术和数学主题的产品?

3 个答案:

答案 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();