首页 > 解决方案 > 如何在 Laravel 集合中使用多个 whereIn

问题描述

我有一组数组,我试图根据$prices传入的值返回。$prices = ['100', '200'];

 $collection = collect([
   ['product' => 'Desk', 'price' => 100, 'price2' => 150],
   ['product' => 'Chair', 'price' => 150, 'price2' => 200],
   ['product' => 'Bookcase', 'price' => 300, 'price2' => 350],
   ['product' => 'Door', 'price' => 400, 'price2' => 200],
   ['product' => 'Door', 'price' => 450, 'price2' => 500],
 ]);

 $filtered = $collection->whereIn('price', $prices)->whereIn('price2', $prices);

 $filtered->all();

/* The result should return where price or price2 is 100 or 200:
  [
    ['product' => 'Desk', 'price' => 100, 'price2' => 150],
    ['product' => 'Chair', 'price' => 150, 'price2' => 200],
    ['product' => 'Door', 'price' => 400, 'price2' => 200],
  ]
*/

标签: phplaravellaravel-5

解决方案


您可以使用 collectionfilter而不是 whereIn :

$prices = ['100', '200'];
$collection = collect([
    ['product' => 'Desk', 'price' => 100, 'price2' => 150],
    ['product' => 'Chair', 'price' => 150, 'price2' => 200],
    ['product' => 'Bookcase', 'price' => 300, 'price2' => 350],
    ['product' => 'Door', 'price' => 400, 'price2' => 200],
    ['product' => 'Door', 'price' => 450, 'price2' => 500],
]);
    
$filtered = $collection->filter(function ($value, $key) use ($prices) {
    return (in_array($value['price'], $prices) || in_array($value['price2'], $prices)) ? true : false ;
});
$filtered->all();

推荐阅读