Laravel Eloquent 如何根据计数获得关系总和

Posted

技术标签:

【中文标题】Laravel Eloquent 如何根据计数获得关系总和【英文标题】:Laravel Eloquent How to get Sum of relationship based on count 【发布时间】:2021-11-06 22:04:06 【问题描述】:

这是我的数据库表: 我有 3 个相互关联的表。

Table Companies
--------------
ID       TITLE

Table Customers
------------------------
ID    company_id    Name

Table Transactions
-----------------------------------------
ID    company_id    customer_id    amount

这是我的模特关系:

Model Relations:
Company:
hasMany(Customers)
hasMany(Transactions)

Customer Model:
belongsTo(Company)
hasMany(Tranactions)

Transactions Model:
belongsTo(Company)
belongsTo(Customer)

我需要获取仅包含 3 笔交易的客户交易“金额”的总和。

这是我的工作方式:

$query = Customer::select('id')->withCount([
    'transactions as transactions_count' => function ($query) use ($safe) 
          $query->where('amount', '>', 0);
     ,
     'transactions AS transactions_sum' => function ($query) use ($safe) 
          $query->select(DB::raw("SUM(amount)"))->where('amount', '>', 0);
     
])->having('transactions_count', 3);
$sql_with_bindings = \Str::replaceArray('?', $query->getBindings(), $query->toSql());

$result = DB::select("
        SELECT
            SUM(x.transactions_sum) as amount
        FROM
        (".$sql_with_bindings.") x
 ");

对更好的雄辩方式有什么建议吗?

【问题讨论】:

【参考方案1】:

$count = Transactions::where('customer_id', 1)->count();

如果($count == 3) 你的参数

【讨论】:

请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。【参考方案2】:

DB::select("your_parameter")->limit(3);

【讨论】:

我不想限制结果。 我有很多客户。现在我想获得只有 3 笔交易的客户的总金额。 您好,欢迎来到 Stack Overflow!请拨打tour。另请查看help center 以获取有关如何格式化代码的信息。

以上是关于Laravel Eloquent 如何根据计数获得关系总和的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent:检测为空或计数

Laravel Eloquent 加入表和计数相关

如何在 Laravel/Eloquent 中获得完整的关系

Laravel Eloquent - 如何获得嵌套关系

laravel Eloquent ORM - 如何获得编译查询?

Laravel Eloquent:计数项目模型关系