合并集合(Merging collections)

2019-10-23 08:00发布

我有一个原始查询:

$data = Product::hydrateRaw(//sql here);

这将返回一个集合。

然后我执行进一步的查询:

$data2 = Product::take(3)->get();

然后,我希望合并这两个集合:

$data->merge($data2);

不幸的是,合并似乎没有任何效果,当我DD()集合只包含$的数据,而不是$数据2。

我要去哪里错了?

Answer 1:

现在,使用产品时::你会得到与拥有使用get或任何其他关系的结果雄辩的收藏对象。 这里的好处是,你实际上可以选择和定制,而不是使用普通数组或别的东西你的收藏。

在这里阅读更多详细信息: http://laravel.com/docs/5.1/eloquent-collections#available-methods 。 你有很多可用的方法为您收集口才对象,其中之一是“合并”。

请小心的是“合并”功能不会修改当前的收藏$的数据。 取而代之的是,它只是返回你合并集合,就是这样。

$mergeData = $data->merge($data2)

如果仍然没有解决您的需求,随意创建自定义集合,并只需创建一个新的方法有,如:

public function merge(Collection $collection) {

    foreach ($collection as $item)
    {
        $this->items[$item->getKey()] = $item;
    }

    //Now this will change your current Collection
}

或与阵列,并且不需要任何水化使用它

public function merge(array $firstResults) {
    //Do your logic of merging $firstResults with your current collection
}

问题是,现有的“合并”的方法,只接受数组作为参数,并把所得的数组不包含任何关系。

此外,不幸的是水合物没有任何滋润你的关系,所以这可能是这里的大或小的障碍。

除此之外,祝你好运。



Answer 2:

尝试这个:

$data2 = Product::take(3)->get()->toArray();
$data->merge($data2);

看到这里 。



文章来源: Merging collections