我有一个原始查询:
$data = Product::hydrateRaw(//sql here);
这将返回一个集合。
然后我执行进一步的查询:
$data2 = Product::take(3)->get();
然后我希望合并两个集合:
$data->merge($data2);
不幸的是合并似乎没有效果,当我dd()时,集合只包含$ data而不是$ data2。
我哪里错了?
答案 0 :(得分:7)
现在,当使用Product ::你会得到一个Eloquent Collection对象,它保存你使用get或任何其他关系的结果。这里的好处是你可以实际选择和自定义你的Collection,而不是使用普通数组或其他东西。
请在此处阅读其他详细信息:http://laravel.com/docs/5.1/eloquent-collections#available-methods。您的Eloquent Collection对象有很多可用的方法,其中一个是“合并”。
请注意“合并”功能不会修改您当前的Collection $数据。而不是那样,它只是返回你合并的集合,就是它。
$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
}
问题在于现有的“merge”方法,只接受数组作为参数,并且结果数组不包含任何关系。
除此之外,不幸的是,水合物也不能保持你的关系,所以这可能是一个小的或大的障碍。
除此之外,祝你好运。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用toBase()
时有效;
$mergedCollection = $collection1->toBase()->merge($collection2);