gpt4 book ai didi

php - Laravel Eloquent - 合并两个 eloquent 模型结果(不是集合)

转载 作者:行者123 更新时间:2023-12-04 14:20:10 31 4
gpt4 key购买 nike

我有一张库存变动表,其中显示了产品的历史记录(接收、移动位置等)

我有两个计算(通过总和)的查询:

  • 原收到数量。
  • 当前的实时数量(在事物被移动之后)。

  • 这两个查询都返回相同模型的集合。它们将始终具有相同数量的结果,并且 product_id 将始终相同。唯一不同的部分是接收/实时数量,我想以某种方式将各个记录合并到一个新集合中。 IE。

    查询 1 中的单个记录:
    0 => StockMovement {#1602 ▼
    #original: array:2 [▼
    "live_qty" => "8"
    "product_id" => "2606598e-4150-461a-9e91-10d67cce8daa"
    ]
    }

    查询 2 中的单个记录;
    0 => StockMovement {#1602 ▼
    #original: array:2 [▼
    "received_qty" => "15"
    "product_id" => "2606598e-4150-461a-9e91-10d67cce8daa"
    ]
    }

    我试图最终得到一个如下所示的合并结果:
    0 => StockMovement {#1602 ▼
    #original: array:3 [▼
    "received_qty" => "15"
    "live_qty" => "8"
    "product_id" => "2606598e-4150-461a-9e91-10d67cce8daa"
    ]
    }

    我想以不将 Product 对象转换为数组的方式执行此操作,因为我需要嵌入其中的关系。

    目前,我已将其破解如下:
    $live = $this->liveQtyCollection();
    $merged = $this->receivedQtyCollection()->map(function(StockMovement $received) use($live){
    $line = $live->where('product_id', $received->product_id)->first();
    return arrayToObject(array_merge($received->toArray(), $line->toArray()));
    });
    return $merged;
    arrayToObject函数,递归地将数组转换回对象,这样我就可以像使用原始集合时一样使用箭头选择器,但我相信一定有更好的方法!

    我试过了:
  • 合并
  • 工会
  • 全部

  • 我的最终目标是能够按如下方式使用生成的集合:
    @foreach($stockMovements as $stockMovement)
    {{ $stockMovement->id }}
    {{ $stockMovement->live_qty }}
    {{ $stockMovement->received_qty }}
    @endforeach

    最佳答案

    您可以使用此代码:

    $collection = collect();
    $cars = Car::all();
    $bikes = Bike::all();

    foreach ($cars as $car)
    $collection->push($car);

    foreach ($bikes as $bike)
    $collection->push($bike);

    Source

    关于php - Laravel Eloquent - 合并两个 eloquent 模型结果(不是集合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734956/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com