【问题标题】:Laravel sum/subtract of two columns based on another columnLaravel 基于另一列对两列进行求和/减法
【发布时间】:2021-11-21 07:23:12
【问题描述】:
+--+-------------+--------+------+------------+
|id|product_price|quantity|status|warehouse_id|
+--+-------------+--------+------+------------+
|1 |20.00        |2000    |1     |1           |
+--+-------------+--------+------+------------+
|1 |30.00        |3000    |1     |2           |
+--+-------------+--------+------+------------+
|1 |40.00        |4000    |1     |2           |
+--+-------------+--------+------+------------+
|1 |50.00        |5000    |2     |2           |
+--+-------------+--------+------+------------+

我有一个包含上述列的销售表

status = 1 表示产品已送达

status = 2 表示产品被退回

我有一个具有销售方法的仓库模型

public function sales () {
    return $this->hasMany(Sale::class);
}

我想要什么?

我想得到每个仓库的总收入

预期结果:

对于id为1的仓库sum = 20*2000

对于id为2的仓库sum = 30*3000 + 40*4000 - 50*5000

我尝试过使用withSum(),但似乎很难做到雄辩的方式。有什么我可以做的吗?

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    您可以使用DB::raw() 执行此操作。但是,将生成的列添加到您的迁移中以获得总数并在其上使用 withSum() 会更有效。

    // Add something like this to the migration
    $table->unsignedBigInteger('total')->storedAs('product_price * quantity');
    
    
    // Then you can do
    Warehouse::withSum('sales', 'total')->get();
    

    【讨论】:

    • 但这并不能解决状态问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    相关资源
    最近更新 更多