Eloquent SUM 和 GET 最新的关系数据

Posted

技术标签:

【中文标题】Eloquent SUM 和 GET 最新的关系数据【英文标题】:Eloquent SUM and GET Latest Relationship Data 【发布时间】:2021-07-16 06:43:43 【问题描述】:

我有两个模型 UserTransaction。 User 模型与 Transaction 是一对多的关系:

我正在尝试返回

    用户表中的一些数据 Transaction表中属于该用户的所有amount的总和 最近交易的交易哈希

预期响应:

  
    "name": "User A",
    "image": "images/user-a.png",
    "last_transaction_hash": "79s8s900",
    "total_transaction_sum": "30000"
  ,
  
    "name": "User B",
    "image": "images/user-b.png",
    "transaction_hash": "a102920",
    "total_transaction_sum": "23000"
  

我尝试过的:

    $users = User::withCount([
        'transactions as total_transaction_sum' => function ($q) 
            return $q->select(DB::raw("SUM(amount) as amount"));
        ,
    ])
        ->orderByRaw('total_transaction_sum DESC NULLS LAST')
        ->get();

通过上述查询,我​​可以返回 (1 & 2) 的数据,但我发现很难选择我想查看的特定列,而且我仍然不知道如何返回最新交易的交易哈希(3)

【问题讨论】:

【参考方案1】:

您可以使用Query builder 在这样的排序行中实现这一点

$users = User::select(\DB::raw('user.name, user.image, SUM(transactions.amount) as total_transaction_sum'))
    ->join('transactions', 'users.id', '=', 'transactions.user_id')
    ->orderByRaw('total_transaction_sum DESC NULLS LAST')
    ->get()
    ->groupBy('id')
    ->map(function ($row) 
        $opt = $row;
        $opt['transaction_hash'] = optional($row->last())->id;
        return $opt;
    )->values();

参考链接https://laravel.com/docs/8.x/queries#joins

【讨论】:

谢谢。知道如何解决3吗?我想从最新的交易中获取信息。 最后transaction hash ? 是的,我只想获取最后一个交易哈希 我做了一些技巧,你能检查一下吗?或根据您的需要进行修改 我对此有一些错误:1. SUM(transactions.amount) 未显示准确的金额总和 2. 我可以看到 transactions.hash

以上是关于Eloquent SUM 和 GET 最新的关系数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 sum 与关系 Laravel Eloquent ORM

Laravel 按 Eloquent 关系分组

我如何加入 Eloquent: 关系?

无法从 eloquent 关系集合中选择特定参数 - 在 tinker 中工作

Eloquent:在关系上调用 Where

如何在没有 N+1 问题和加载整个模型的情况下计算 eloquent 关系?