【问题标题】:How to combine multiple collections into single collection in Laravel 5.x?如何在 Laravel 5.x 中将多个集合组合成单个集合?
【发布时间】:2016-10-30 21:47:54
【问题描述】:

我正在使用 Laravel 5.3 和 mariaDB 10.1.x。

我有几个 SQL 查询将用于一个报告表。我想使用多个查询(每个查询一点都不简单),而不是一个复杂的单个查询来进行维护。

我想要做的是将每个查询的结果转换为集合格式,并将这些结果与单个集合(例如来自一个大查询的集合)结合起来。

(1) 来自第一个查询的集合

$a = DB::table('first_name')->where(...)->join(...)->leftJoin(...)->get();

result
-----------------------
primary_key  first_name
    1           John
    2           Mary 
-----------------------

(2) 来自第二个查询的集合。

$b = DB::table('last_name')->where(...)->join(...)->leftJoin(...)->get();

Result
-----------------------
primary_key  last_name
    1           Doe
    2           Jane 
-----------------------

(3) 我想要的集合(使用 primary_key 组合 (1) + (2))

-----------------------------------
primary_key  first_name  last_name
    1           John        Doe
    2           Mary        Jane 
-----------------------------------

感谢您的帮助。

【问题讨论】:

  • 你有没有想过这个问题?

标签: php mysql laravel laravel-5.3


【解决方案1】:

这个怎么样?不确定这是否是最好的方法:

$keyedA = $a->keyBy('primary_key')->all();
$keyedB = $b->keyBy('primary_key')->all();
$combined = array_merge_recursive($keyedA, $keyedB);

我没有看到任何辅助方法可以进行键合并,不确定我是否正确阅读

【讨论】:

  • 感谢您的回复,我认为我没有详细说明情况,但是 A 拥有所有主键但 B 并不总是拥有所有键,它可能缺少键(意味着与 A 相比缺少行)例如,A 的主键是 1,2,3,而 B 的主键只有 1,2。所以这意味着 B 应该像 SQL 中的“左外连接”一样工作。
猜你喜欢
  • 2011-06-21
  • 2017-04-20
  • 2015-02-26
  • 2012-01-01
  • 2018-09-18
  • 1970-01-01
  • 2018-09-22
  • 2018-07-17
相关资源
最近更新 更多