Eloquent SUM 和 GET 最新的关系数据
Posted
技术标签:
【中文标题】Eloquent SUM 和 GET 最新的关系数据【英文标题】:Eloquent SUM and GET Latest Relationship Data 【发布时间】:2021-07-16 06:43:43 【问题描述】:我有两个模型 User 和 Transaction。 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