以雄辩的方式获取具有多个ID的记录

时间:2015-09-19 10:51:43

标签: laravel eloquent

您好我将几个项目的ID及其数量发布到我的服务器,例如:

[{"id": "1", "quantity": "2"}, {"id": "2", "quantity": "5"}, {"id": "3", "quanity": "10"}]

现在在我的服务器上,我需要验证这些ID中的每一个,并从我们的数据库表中的各自行获取某些值。

我只想做的是:

foreach ($items as $item)
{
  $row = Items::find($item);
  $price = $row->price;
}

但是我想知道 foreach循环是否会对速度性能产生巨大影响,因为这些项目可能很多。< / p>

我的问题是,有没有一种方法可以在不使用foreach循环的情况下执行此操作,就像可以根据id数组获取数据的查询一样。

1 个答案:

答案 0 :(得分:2)

如果要获取某些ID的所有价格属性,可以使用查询的构建器whereIn方法来实现此目的。whereIn接受一个值数组并返回对应的行这些价值。在性能方面也非常划算

我看到你传递了一个json字符串,所以如果你在哪里使用whereIn,一个解决方案可能如下:

实施例

//json string
$json = '[{"id": "1", "quantity": "2"}, {"id": "2", "quantity": "5"}, {"id": "3", "quanity": "10"}]';

//convert json to array
$json_toArray = json_decode($json,true);

//get id values from array
//If you are using php 5.5+ this will work, if you are using an older version you can use 
//array_map method like this: $array_ids = array_map(function ($array) {return $array['id'];}, $json_toArray);
$array_ids = array_column($json_toArray, 'id');

//Finally execute the query

//Using Eloquent
$result = Items::whereIn('id', $array_ids)->select('price')->get();

//Using the Query Builder
$result = DB::table('items')->whereIn('id',$array_ids)->select('price')->get();