将两个查询合并为一个并对其进行排序

时间:2017-12-05 11:20:27

标签: php laravel

我正在尝试在列表中显示建筑物和电路(总共只有3个,按列排序" updated_at")。问题是它们不在同一个表中。我有一张表circuits和一张表buildings

我试着这样做:

$buildings = Building::published()->limit(3)->get();
$circuits = Circuit::published()->limit(3)->get();

$merged = $buildings->merge($circuits);

$this->data['buildingsAndCircuits'] = $merged->all();

当我做var_dump时,我把一切都搞定了,而且当我做foreach时我知道如何访问数据。但那不符合我的要求。

我想对它们进行排序(updated_at)并且只有三个而不是六个。

有办法吗?

我尝试在$merge上创建类似于QueryBuilder的条件,但它不起作用

$this->data['buildingsAndCircuits'] = $merged->orderBy('updated_at', 'DESC')->limit(3)->all();

非常感谢

1 个答案:

答案 0 :(得分:2)

在每个查询中调用get后,执行查询并返回结果。 orderBy之后的$buildings, $circuits将不再有效,因为$merged$buildings = Building::published()->limit(3)->get(); $circuits = Circuit::published()->limit(3)->get(); $merged = $buildings->merge($circuits)->sortByDesc('updated_at'); $this->data['buildingsAndCircuits'] = $merged->all(); 中的内容是一个集合。

但你可以这样做:

var jsonobj = {

  "gender": "male",
  "country": "us",
  "phone": "06 12 34 56 78",
  "enterprise": {
    "parameters": {
      "company": "foo",
      "companyID": "12345678912345",
      "address": "adress principale",
     }
   },
  "contacts": [],
   "requirements": []
 }

检查documentation

中您可以对集合做些什么