I have these tables:
Orders:
id - status -user_id - address_id
1 await 1 1
products:
id - name - price - quantity
1 test1 100$
You can retrieve the pivot table columns by accessing the pivot
attribute, this has been there for a long while.
By default, only the model keys will be present on the pivot object. If your pivot table contains extra attributes, you must specify them when defining the relationship:
In your case you can define the relationship like in the following code:
class Order extends Model {
public function products()
{
return $this->belongsToMany(Order::class)->withPivot('quantity')
}
}
Now the quantity
column on the order_product
table will be accessible via the pivot
attribute (e.g. $order->products()->first()->pivot->quantity
).
In the end, here is the resulting code to calculate the order total:
$total = 0;
foreach ($product as $products) {
$total += $product->price * $product->pivot->quantity
}
$total += $order->address()->city->shipping_charges
Source: https://laravel.com/docs/master/eloquent-relationships#many-to-many
Find the sum of a field by using laravel collection by doing something like this;
$profuctTotal=Product::all()->sum('price'); Do same for others using Eloquent models.
$orderitem = DB::table('order_product')->where('order_id', 'your order id')->get();
// Now create a foreach loop for get total price
$total = 0;
foreach($orderitem as $order){
$porduct = DB::table('products')->where('id', $order->product_id)->first();
$total += $porduct->price * $order->quantity;
}
// now you got sub total
$shipping = DB::table('cities')->where('id', 'Orders table address column')->first();
$subtotal = $tatal + $shipping->shipping_charges;