gpt4 book ai didi

laravel - 合并使用相同ID的多个对象

转载 作者:行者123 更新时间:2023-12-04 10:50:22 24 4
gpt4 key购买 nike

我正在尝试使用Collection->merge()合并多个对象(例如收据,报告等)。

这是我使用的代码:

$receipts = Receipt::all();
$reports = Report::all();

$collection = $receipts->merge($reports);

结果如下:

上面的屏幕截图显示了两个元素,但是缺少第三个元素,因为它具有与第一个相同的ID(ID:“1”)。我想要实现的是将它们全部显示为一个集合。

编辑:

我需要将结果作为对象(集合),因为我还在 View 上使用了代码,在该 View 中检查类以确定要显示的内容。另外,我使用此功能对集合中的对象进行排序。
    $collection->sort(function($a, $b)
{
$a = $a->created_at;
$b = $b->created_at;
if ($a === $b) {
return 0;
}
return ($a > $b) ? 1 : -1;
});

最佳答案

我知道这是一个古老的问题,但是我仍然会提供答案,以防万一有人像我一样从搜索中来。

如果您尝试将两个不同的 Eloquent 集合合并为一个,并且某些对象恰好具有相同的ID,则一个对象将覆盖另一个对象。我不知道为什么要这么做,如果那是错误或功能,则需要更多的研究。要解决此问题,请改用push()方法,或者重新考虑解决问题的方法来避免这种情况。

问题示例:

$cars = Car::all();
$bikes = Bike::all();
$vehicles = $cars->merge($bikes);
// if there is a car and a bike with the same id, one will overwrite the other

可能的解决方案:
$collection = collect();
$cars = Car::all();
$bikes = Bike::all();

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

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

资料来源: https://medium.com/@tadaspaplauskas/quick-tip-laravel-eloquent-collections-merge-gotcha-moment-e2a56fc95889

关于laravel - 合并使用相同ID的多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058911/

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