A cargo has many orders. An order has a quantity and a price. For every order in a cargo, I want to return the sum of quantity * price as a single value.
A cargo collection returns data as:
{
"data": {
"cargo_id": 4,
"name": "Cargo Name",
"qty": "366200.00",
"cost": 140,
"product_id": 1,
"product": {
"id": 1,
"name": "Sample Product"
},
"orders": [
{
"id": 1,
"cargo_id": 4,
"qty": 14200,
"price": "500"
},
{
"id": 4,
"cargo_id": 4,
"qty": 12000,
"price": "500"
},
{
"id": 6,
"cargo_id": 4,
"qty": 5600,
"price": "500"
}
],
"comments": "sample",
}
}
I have tried using an Eloquent Accessor in the Cargo class as:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Cargo extends Model
{
protected $guarded = [];
protected $appends = [
'product_margin'
];
public function orders() {
return $this->hasMany(Order::class);
}
public function getProductMarginAttribute() {
$orders = $this->orders();
$total = 0;
foreach ($orders as $order) {
$total += $order['qty'] * $order['price'];
}
return $total;
}
}
But product_margin returns 0. How can I get this working?