合并收集信上的Laravel错误从4.0升级到4.1

时间:2014-05-21 16:01:17

标签: collections laravel merge laravel-4

稍后升级Laravel版本我发现Collection::merge方法效果不佳。

不确定是否是我的问题,我找不到错误。让我们看一些信息:

print_r($ecb->count());
print_r($boc->count());

// merge both
$cubes = $ecb->merge($boc);

print_r($cubes->count());
dd();

输出:

  

36 27 1

合并应该给出类似输出36 + 27(集合上没有重复元素)

更多调试信息:

print_r($ecb->toArray());
print_r($boc->toArray());

// merge both
$cubes = $ecb->merge($boc);

print_r($cubes->toArray());
dd();

输出(有点长):http://laravel.io/bin/PdVj1#7

有什么想法吗? 感谢

3 个答案:

答案 0 :(得分:1)

是的 - 它似乎在4到4.1之间发生了变化

请参阅此Github问题:https://github.com/laravel/framework/issues/3445

本质上,Eloquent集合在合并时会删除具有重复主键的模型。

我正在运行Laravel 4.1.29 - 我使用count()获得了不同的输出 - 但实际上它只是删除了重复的ID。

答案 1 :(得分:1)

我在Laravel 4.1中看到合并删除元素具有相同的ID(https://github.com/laravel/framework/issues/3445

为了获得相同的行为,我应该像这样更改代码:

$boc->each(function($cube) use ($ecb)
{
    $ecb->push($cube);
});

答案 2 :(得分:0)

合并功能使用Model#getKey()来区分不同的模型 - 您使用的模型是否正确指定了主键?我注意到他们没有标准id字段。