$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 関数が実行されると、同じ productID の複数のインスタンスの価格が考慮されないため、合計は正しくありません。
次のコードも、配列内のすべての製品 ID に対して同じオブジェクトを返すわけではありません。したがって、$pidArray に 3 つの同一の製品 ID が含まれている場合、クエリは 3 つではなく、1 つのオブジェクトを含むコレクションのみを返します。
$query = Product::select();
foreach ($pidArray as $id)
{
$query->orWhere('id', '=', $id);
}
$productDataForOrder = $query->get(['id','price']);
$totalAmount = $productDataForOrder->sum('price');