您好我将几个项目的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数组获取数据的查询一样。
答案 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();