【发布时间】:2016-07-31 06:33:54
【问题描述】:
$pidArray 包含产品 ID,其中一些产品 ID 可以相同。 IE:34 34 56 77 99 34。看起来 whereIn 方法不会返回它已经在 $pidArray 中找到的 productId 的结果,即使它有不同的索引。
$productDataForOrder = Product::whereIn('id', $pidArray)->get(['id','price']);
$totalAmount = $productDataForOrder->sum('price');
$productDataForOrder 现在包含产品数据,但仅适用于 $pidarray 中的唯一 ProductID。因此,当 sum 函数运行时,sum 是错误的,因为它没有考虑相同 productID 的多个实例的价格。
以下代码也不会为数组中的每个产品 ID 返回相同的对象。因此,如果 $pidArray 包含三个相同的产品 ID,则查询将只返回一个包含一个对象的集合,而不是三个。
$query = Product::select();
foreach ($pidArray as $id)
{
$query->orWhere('id', '=', $id);
}
$productDataForOrder = $query->get(['id','price']);
$totalAmount = $productDataForOrder->sum('price');
【问题讨论】:
-
将您的完整代码发布到那里。上面的代码是对的。
-
@trinvh 这几乎是我的完整代码。控制器从请求对象中获取产品 ID 列表,这些 ID 存储在 $pidArray 中。然后使用 $pidArray 中的 ID 提取数组中每个产品 ID 的 [id,price] 数据。 $pidArray 中可以有多个相同的产品 ID,我需要为每个添加价格。
-
如果我明白你的意思。尝试 get(['id, 'price', DB::raw("sum(price)")]) 代替。
-
@trinvh 不,这并没有什么不同。我不知道如何才能使我的解释更简单。我有一系列产品 ID,其中一些产品 ID 可以相同。我想为数组中的每个产品 ID 返回一个 [id, price] 对象的集合,然后添加价格。照原样,查询不会返回多个相同产品 ID 的上述对象,仅返回一个。我想在一个查询中执行此操作。
标签: laravel eloquent laravel-query-builder