首先,我创建了两个不同的查询。
$first = first::where('id',$request->first_id)->select('name','created_at')->get();
$second = second::where('id', $request->second_id)->select('name','created_at')->get();
然后我合并了两个结果数组。
$data_combine = array_merge($first->toArray(), $second->toArray());
最后,我想根据created_at
值按升序对组合数组进行排序,例如' 2016-05-06 16:43:46'。
答案 0 :(得分:3)
您可以使用Laravel Collection方法轻松完成此操作。与常规数组不同,使用Collection,您仍然可以访问Laravel在模型上提供的所有其他有用的收集方法。
您可以将数组合并到一个新集合中,然后对该集合进行排序。
collect(array_merge($first -> toArray(), $second -> toArray())) -> sortBy('created_at');
更流畅的写作方式也可以起作用
$first -> push($second) -> flatten() -> sortBy('created_at');
要实现此目标,created_at
需要显示。如果尚未在模型的可见属性中定义(并且可以安全地执行此操作),则需要先添加该属性。否则,您需要循环初始集合并运行addVisible('created_at')
以使其对您当前的结果可见。
答案 1 :(得分:1)
$array = array_values(array_sort($data_combine , function ($value) {
return $value['created_at'];
}));
您可以使用array_sort函数对合并的数组进行排序。
答案 2 :(得分:0)
无需使用toArray()
,因为Collection有all()
方法:
$combine = collect(array_merge($first->all(), $second->all()))->sortByDesc("created_at");
如果两个数组中只有一个元素,可以尝试:
$combine = collect([$first->first(), $second->first()])->sortByDesc("created_at");