pan*_*hro 1 laravel eloquent laravel-5
我有一个原始查询:
$data = Product::hydrateRaw(//sql here);
Run Code Online (Sandbox Code Playgroud)
这将返回一个集合.
然后我执行进一步的查询:
$data2 = Product::take(3)->get();
Run Code Online (Sandbox Code Playgroud)
然后我希望合并两个集合:
$data->merge($data2);
Run Code Online (Sandbox Code Playgroud)
不幸的是合并似乎没有效果,当我dd()时,集合只包含$ data而不是$ data2.
我哪里错了?
现在,当使用Product ::你会得到一个Eloquent Collection对象,它保存你使用get或任何其他关系的结果.这里的好处是你可以实际选择和自定义你的Collection,而不是使用普通数组或其他东西.
请在此处阅读其他详细信息:http://laravel.com/docs/5.1/eloquent-collections#available-methods.您的Eloquent Collection对象有很多可用的方法,其中一个是"合并".
请注意"合并"功能不会修改您当前的Collection $数据.而不是那样,它只是返回你合并的集合,就是这样.
$mergeData = $data->merge($data2)
Run Code Online (Sandbox Code Playgroud)
如果仍然无法解决您的需求,请随意创建自定义集合,然后在其中创建一个新方法:
public function merge(Collection $collection) {
foreach ($collection as $item)
{
$this->items[$item->getKey()] = $item;
}
//Now this will change your current Collection
}
Run Code Online (Sandbox Code Playgroud)
或者与阵列一起使用,不需要任何水合作用
public function merge(array $firstResults) {
//Do your logic of merging $firstResults with your current collection
}
Run Code Online (Sandbox Code Playgroud)
问题是现有的"merge"方法,只接受数组作为参数,并且结果数组不包含任何关系.
除此之外,不幸的是水合物也不能保持你的关系,所以这可能是一个小的或大的障碍.
除此之外,祝你好运.
当你使用toBase()它的时候它就起作用了;
$mergedCollection = $collection1->toBase()->merge($collection2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4790 次 |
| 最近记录: |