$pidArray содержит идентификаторы продуктов, некоторые из этих идентификаторов продуктов могут совпадать. IE: 34 34 56 77 99 34. Похоже, что метод whereIn не возвращает результатов для productId, который уже найден в $pidArray, даже если он имеет другой индекс.
$productDataForOrder = Product::whereIn('id', $pidArray)->get(['id','price']);
$totalAmount = $productDataForOrder->sum('price');
$productDataForOrder теперь содержит данные о продукте, но только для уникальных ProductID в $pidarray. Таким образом, при запуске функции суммирования сумма неверна, поскольку она не учитывает цену для нескольких экземпляров одного и того же идентификатора продукта.
Следующий код также не возвращает одинаковые объекты для каждого идентификатора продукта в массиве. Таким образом, если $pidArray содержит три одинаковых идентификатора продукта, запрос вернет коллекцию только с одним объектом вместо трех.
$query = Product::select();
foreach ($pidArray as $id)
{
$query->orWhere('id', '=', $id);
}
$productDataForOrder = $query->get(['id','price']);
$totalAmount = $productDataForOrder->sum('price');