Php 在laravel中合并两个集合

Php 在laravel中合并两个集合,php,laravel-5,laravel-query-builder,Php,Laravel 5,Laravel Query Builder,需要合并两个集合 $combined = $firstCollection->merge($secondCollection) 我有两个集合,需要将它们合并到一个集合中 这些集合是使用Eloquent的两个查询的输出 第一个结果如下所示: Collection {#350 #items: array:2 [ 0 => {#342 +"id": 1 +"code": "C000215" +"name": "Mostafa Mohamed

需要合并两个集合

$combined = $firstCollection->merge($secondCollection)
我有两个集合,需要将它们合并到一个集合中

这些集合是使用Eloquent的两个查询的输出

第一个结果如下所示:

Collection {#350
  #items: array:2 [
    0 => {#342
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 1
      +"CommunicationCount": 0
    }
    1 => {#337
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 2
      +"CommunicationCount": 0
    }
]
}
Collection {#350
  #items: array:2 [
    0 => {#346
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceAmount": 0.0
    }
    1 => {#340
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceAmount": 0.0
    }
]
}
第二个查询结果如下:

Collection {#350
  #items: array:2 [
    0 => {#342
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 1
      +"CommunicationCount": 0
    }
    1 => {#337
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 2
      +"CommunicationCount": 0
    }
]
}
Collection {#350
  #items: array:2 [
    0 => {#346
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceAmount": 0.0
    }
    1 => {#340
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceAmount": 0.0
    }
]
}
我使用此代码合并了这两个集合

$combined = $firstCollection->merge($secondCollection)
我期望低于产量

Collection {#350
  #items: array:2 [
    0 => {#346
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 1
      +"CommunicationCount": 0
      +"CoachServiceAmount": 0.0
    }
    1 => {#340
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 2
      +"CommunicationCount": 0
      +"CoachServiceAmount": 0.0
    }
]
}
但我得到了这个输出

Collection {#350
  #items: array:4 [
    0 => {#342
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 1
      +"CommunicationCount": 0
    }
    1 => {#337
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceCount": 0
      +"CourseServiceCount": 2
      +"CommunicationCount": 0
    }
    2 => {#346
      +"id": 1
      +"code": "C000215"
      +"name": "Mostafa Mohamed Bayomi"
      +"mobile1": "01228902157"
      +"mobile2": ""
      +"CoachServiceAmount": 0.0
    }
    3 => {#340
      +"id": 2
      +"code": "C000216"
      +"name": "Sayed Mohamed Bayomi"
      +"mobile1": "01228902158"
      +"mobile2": ""
      +"CoachServiceAmount": 0.0
    }
  ]
}
问题 包含以下文本:

merge方法将给定数组或集合与原始集合合并。如果给定项中的字符串键与原始集合中的字符串键匹配,则给定项的值将覆盖原始集合中的值(…)如果给定项的键是数字的,则值将追加到集合的末尾

这意味着
merge()
不会像您预期的那样工作,因为您使用的是数字键

解决方案1:非数字键 您的问题的一个解决方案是使用非数值作为数组键,此解决方案仅在所选字段(示例中的
code
是主键)为主键时有效:

keyBy方法按给定的键为集合设置键。如果多个项目具有相同的键,则新集合()中将只显示最后一个项目

values方法返回一个新集合,其中键重置为连续整数()

解决方案2:压缩 如果两个集合中的元素数量和顺序相同,则可以执行以下操作:

$combined = $firstCollection->zip($secondCollection);
zip方法将给定数组的值与相应索引()处的原始集合的值合并在一起


来自merge()的文档:如果给定项的键是数字的,那么这些值将附加到集合的末尾。HTHdo您的意思是只有当值为整数时它才会工作?您的项键为整数(0、1、2等),这意味着当您合并时,它将导致一个集合附加到另一个集合的末尾