【问题标题】:Sum by cases using just Eloquent仅使用 Eloquent 按案例求和
【发布时间】:2019-03-19 02:01:46
【问题描述】:

我有一个名为 Purchases 的模型,它与 Product 模型具有多对多关系。我创建了一个模型来管理名为 PurchasedProduct 的多对多关系中的表。该模型与另一个称为 Currency 的模型相关。

采购表:ID、编号、created_at、updated_at。
Product_table:ID、描述、created_at、updated_at。
货币表:ID、代码、名称、比率。
Product_Purchase 表:ID、purchase_id、product_id、currency_id、数量、价格。

一个User可以购买多个Products然后,他可以支付多个Currencies。为了管理每笔交易,我想按货币对总额(数量 * 价格)求和。 我试过用访问器来做,但我所能做的就是在不考虑货币的情况下对数量 * 价格的乘积求和。

public function getTotalAttribute($value)
{
    $transformers = $this->transformers();
    return $transformers->sum(\DB::raw('quantity * price'));
}`

【问题讨论】:

  • 您应该从这里开始编写确切的原始 MySQL 查询,该查询会生成您想要的输出。然后,担心将其转换为 Eloquent/PHP 代码。
  • @TimBiegeleisen 当然,我有,但我只使用 laravel 来寻找结果
  • 那么您应该包含该查询。我认为这会帮助您更快地在这里得到答案。
  • 请提供一些示例数据和预期结果。

标签: laravel eloquent laravel-query-builder


【解决方案1】:

你可以使用groupBy

public function getTotalAttribute($value)
{
    $transformers = $this->transformers();
    return $transformers->groupBy('currency_id')
    ->selectRaw('sum(quantity * price) as sum, currency_id')
    ->get();
}

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 1970-01-01
    • 2020-12-29
    • 2016-10-18
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多