Reputation:
I have these tables:
Orders:
id - status -user_id - address_id
1 await 1 1
products:
id - name - price - quantity
1 test1 100$ 5
2 test2 50$ 5
order_product:
order_id - product_id - quantity
1 1 2
1 2 2
cities:
id - name - shipping_charges
1 NY 30$
How can I count the total price of the these columns:
for each product:
products(price) * order_product(quantity)
for all products with shipping_charges
- products(price) * order_product(quantity) + cities(shipping_charges)
Upvotes: 0
Views: 2201
Reputation: 11
$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;
Upvotes: 1
Reputation: 332
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
Upvotes: 0
Reputation: 426
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.
Upvotes: 1