如何从数组中获取相乘的数组键的总和

Posted

技术标签:

【中文标题】如何从数组中获取相乘的数组键的总和【英文标题】:How to get the sum of multiplied array keys from an array 【发布时间】:2021-10-27 22:45:18 【问题描述】:

一个cargo 有很多orders。一个order 有一个quantity 和一个price。对于cargo 中的每个order,我想将quantity * price 的总和作为单个值返回。

cargo 集合返回数据为:


    "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",
    

我尝试在 Cargo 类中使用 Eloquent 访问器:

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;
    

但是product_margin 返回0。我怎样才能让它工作?

【问题讨论】:

【参考方案1】:

这个 $this->orders()返回有很多关系数据。要从关系数据中获取项目集合,您应该使用get()。更新Cargo modal 中的代码。

    public function getProductMarginAttribute() 
        $orders = $this->orders()->get();
        $total = 0;

        foreach ($orders as $order) 
            $total += $order['qty'] * $order['price'];
        

        return $total;
    

【讨论】:

以上是关于如何从数组中获取相乘的数组键的总和的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Angular2(Typescript)中的 Json 数组中获取值的总和

下划线 - 从数组中获取相同的值对象总和

如何对对象中特定键的所有值求和?

从数组 Laravel 中获取元素总和

如何从 Javascript 中的对象列表中获取键的值?

如何计算数组中对象键的总和 - javascript