【问题标题】:How to write a subquery from dataset in laravel php如何在 laravel php 中从数据集编写子查询
【发布时间】:2021-03-30 12:15:29
【问题描述】:

数据集

[
     {
        "agent_id": "D01",
        "amount": "2"
     },
     {
        "agent_id": "D01",
        "amount": "2"
     },
     {
        "agent_id": "A01",
        "amount": "1"
     },
     {
        "agent_id": "A01",
        "amount": "1"
     },
    
]

预期结果

[
     {
        "agent_id": "D01",
        "amount": "4"
     },
     {
        "agent_id": "A01",
        "amount": "2"
     },
   
]

您好,如上图所示,有一个包含 4 个集合的原始数据集。我试图通过agent_id 和amount 的总和来转换数据。

我打算使用子查询喜欢select agent_id, sum(amount) from (Dataset) group by agent_id,但是我不知道如何在 laravel 子查询中实现它。任何人都可以指导我或提供一些建议。欣赏它。

【问题讨论】:

  • 通常,当涉及到复杂的查询时,可能想自己构建它并使用DB::raw来执行它。 (ref)
  • @Nicolas 感谢您的回复,但结果数据是从数据集而不是表中检索的
  • 你的意思是使用集合吗?你可以使用类似Collection::reduce()
  • @HazemMohamed 您好,谢谢您的建议。你能帮我举一些例子吗?因为我刚刚尝试过,但仍然无法通过 group by 实现它
  • 请查看@Donkarnash 的回答,这实际上是一个很好的例子

标签: php laravel collections dataset subquery


【解决方案1】:

如果数据是通过数据集或 api 调用提供的,那么您可以使用 Laravel 集合方法来操作并获得所需的输出

//Assuming that the data is in array format
$output = collect($data)
  ->groupBy('agent_id')
  ->map(
    fn($records, $agent) => ['agent_id' => $agent, 'amount' => $records->sum('amount')]
  )
  ->values()->all();

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2022-01-03
    • 2019-05-06
    • 1970-01-01
    • 2018-11-26
    • 2017-11-28
    • 2019-07-13
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多