Laravel 5.3中的concat系列

时间:2017-12-14 01:18:34

标签: php laravel laravel-5

我试图将集合集合连接到另一组集合。我在Laravel 5.5中看到它具有concat功能,但出于兼容性原因,我必须使用直到Laravel 5.3。

我尝试了merge函数,但它不是连接而是合并。

还有什么其他解决方法,或者如何在不更新整个Laravel软件包的情况下更新Laravel Collection?

3 个答案:

答案 0 :(得分:3)

如果您愿意,可以通过"宏" s向Illuminate\Support\Collection添加功能:

\Illuminate\Support\Collection::macro('concat', function ($source) {
    $result = new static($this);

    foreach ($source as $item) {
        $result->push($item);
    }

    return $result;
});

$new = $someCollection->concat($otherOne);

从5.5。

复制方法

我在Laravel中有一篇关于宏的简短博文,如果有帮助的话:

asklagbox blog - Laravel macros

Laravel 5.5 Docs - Collections - Extending Collections虽然这是来自5.5个文档Collection已经有了这个宏功能一段时间了。

答案 1 :(得分:1)

好的,没关系,我正在使用下面的代码作为解决方法,

$first_collection->each(function($element) use (&$second_collection) {

 $second_collection->push($element);

});

答案 2 :(得分:0)

merge 函数正是您所需要的。

The documenation

<块引用>

如果给定项的键是数字,则值将附加到集合的末尾:

这正是您所需要的。

如果您不确定 items 键,您可以随时使用 ->values() 函数

所以最终的设计是:

use Illuminate\Support\Collection;
...
$payments = new Collection();
$payments = $payments
            ->merge($payments1->values())
            ->merge($payments2->values());