0

I've got $campus_groups coming from CampusGroup

$campus_groups = CampusGroup::where('campus_id', $campus_id)->get();

which has

[
    {"id":1,"campus_id":1,"group_id":1,"created_at":"2021-03-15T08:15:27.000000Z","updated_at":"2021-03-15T08:15:27.000000Z"},
    {"id":2,"campus_id":1,"group_id":2,"created_at":"2021-03-15T08:15:37.000000Z","updated_at":"2021-03-15T08:15:37.000000Z"},
    {"id":3,"campus_id":1,"group_id":5,"created_at":"2021-03-15T08:16:49.000000Z","updated_at":"2021-03-15T08:16:49.000000Z"}
]

and $campus_org_groups coming from CampusOrganizationGroup

$campus_org_groups = CampusOrganizationGroup::where('campus_id', $campus_id)->get();

which has

[
    {"id":1,"campus_id":1,"campus_organization_id":1,"group_id":3,"created_at":"2021-03-15T08:15:50.000000Z","updated_at":"2021-03-15T08:15:50.000000Z"},
    {"id":2,"campus_id":1,"campus_organization_id":1,"group_id":4,"created_at":"2021-03-15T08:15:55.000000Z","updated_at":"2021-03-15T08:15:55.000000Z"},
    {"id":3,"campus_id":1,"campus_organization_id":1,"group_id":6,"created_at":"2021-03-15T08:17:28.000000Z","updated_at":"2021-03-15T08:17:28.000000Z"}
]

and would like to get both together like this (the important key is group_id and I'm ok if campus_organization_id is left out)

[
    {"id":1,"campus_id":1,"group_id":1,"created_at":"2021-03-15T08:15:27.000000Z","updated_at":"2021-03-15T08:15:27.000000Z"},
    {"id":2,"campus_id":1,"group_id":2,"created_at":"2021-03-15T08:15:37.000000Z","updated_at":"2021-03-15T08:15:37.000000Z"},
    {"id":3,"campus_id":1,"group_id":5,"created_at":"2021-03-15T08:16:49.000000Z","updated_at":"2021-03-15T08:16:49.000000Z"},
    {"id":1,"campus_id":1,"group_id":3,"created_at":"2021-03-15T08:15:50.000000Z","updated_at":"2021-03-15T08:15:50.000000Z"},
    {"id":2,"campus_id":1,"group_id":4,"created_at":"2021-03-15T08:15:55.000000Z","updated_at":"2021-03-15T08:15:55.000000Z"},
    {"id":3,"campus_id":1,"group_id":6,"created_at":"2021-03-15T08:17:28.000000Z","updated_at":"2021-03-15T08:17:28.000000Z"}
]

If I merge them

$obj_merged = $campus_groups->merge($campus_org_groups);

this is what I'm getting

[
    {"id":1,"campus_id":1,"campus_organization_id":1,"group_id":3,"created_at":"2021-03-15T08:15:50.000000Z","updated_at":"2021-03-15T08:15:50.000000Z"},
    {"id":2,"campus_id":1,"campus_organization_id":1,"group_id":4,"created_at":"2021-03-15T08:15:55.000000Z","updated_at":"2021-03-15T08:15:55.000000Z"},
    {"id":3,"campus_id":1,"campus_organization_id":1,"group_id":6,"created_at":"2021-03-15T08:17:28.000000Z","updated_at":"2021-03-15T08:17:28.000000Z"}
]

If I union them

$obj_merged = $campus_groups->union($campus_org_groups);

this is what I'm getting

[
    {"id":1,"campus_id":1,"group_id":1,"created_at":"2021-03-15T08:15:27.000000Z","updated_at":"2021-03-15T08:15:27.000000Z"},   
    {"id":2,"campus_id":1,"group_id":2,"created_at":"2021-03-15T08:15:37.000000Z","updated_at":"2021-03-15T08:15:37.000000Z"},
    {"id":3,"campus_id":1,"group_id":5,"created_at":"2021-03-15T08:16:49.000000Z","updated_at":"2021-03-15T08:16:49.000000Z"}
]
Tiago Martins Peres
  • 14,289
  • 18
  • 86
  • 145

4 Answers4

3

I've changed

$campus_groups = CampusGroup::where('campus_id', $campus_id)->get();
$campus_org_groups = CampusOrganizationGroup::where('campus_id', $campus_id)->get();

to

$campus_groups = collect(CampusGroup::where('campus_id', $campus_id)->get(['id','campus_id','group_id','created_at','updated_at'])); 
$campus_org_groups = collect(CampusOrganizationGroup::where('campus_id', $campus_id)->get(['id','campus_id','group_id','created_at','updated_at']));

Notice the usage of collect() and also specification of the fields I really wanted (leaving out campus_organization_id). Then, the initial merge

$obj_merged = $campus_groups->merge($campus_org_groups);

would return the desired output

[
    {"id":1,"campus_id":1,"group_id":1,"created_at":"2021-03-15T08:15:27.000000Z","updated_at":"2021-03-15T08:15:27.000000Z"},
    {"id":2,"campus_id":1,"group_id":2,"created_at":"2021-03-15T08:15:37.000000Z","updated_at":"2021-03-15T08:15:37.000000Z"},
    {"id":3,"campus_id":1,"group_id":5,"created_at":"2021-03-15T08:16:49.000000Z","updated_at":"2021-03-15T08:16:49.000000Z"},
    {"id":1,"campus_id":1,"group_id":3,"created_at":"2021-03-15T08:15:50.000000Z","updated_at":"2021-03-15T08:15:50.000000Z"},
    {"id":2,"campus_id":1,"group_id":4,"created_at":"2021-03-15T08:15:55.000000Z","updated_at":"2021-03-15T08:15:55.000000Z"},
    {"id":3,"campus_id":1,"group_id":6,"created_at":"2021-03-15T08:17:28.000000Z","updated_at":"2021-03-15T08:17:28.000000Z"}
]
Tiago Martins Peres
  • 14,289
  • 18
  • 86
  • 145
1

Could you test this solution:

$obj_merged = (object) array_merge((array) $campus_groups, (array) $campus_org_groups);
mohammad asghari
  • 1,817
  • 1
  • 16
  • 23
  • I'm not able to return that but if I dd() it, can see only `{#1402 ▼ #items: array:3 [▼ 0 => App\CampusOrganizationGroup {#1420 ▶} 1 => App\CampusOrganizationGroup {#1421 ▶} 2 => App\CampusOrganizationGroup {#1422 ▶} ] }` – Tiago Martins Peres Mar 15 '21 at 09:20
1

this is very simple operation, array_merge should work

<?php $campus_groups = [
['id' => 1, 'campus_id'=> 1, 'group_id'=> 1],
['id' => 2, 'campus_id'=> 1, 'group_id'=> 2],
['id' => 3, 'campus_id'=> 1, 'group_id'=> 5],
];

$campus_org_groups = [
['id' => 1, 'campus_id'=> 1, 'group_id'=> 3, 'campus_organization_id' => 1],
['id' => 2, 'campus_id'=> 1, 'group_id'=> 4, 'campus_organization_id' => 1],
['id' => 3, 'campus_id'=> 1, 'group_id'=> 5, 'campus_organization_id' => 1],

];

print_r(array_merge($campus_groups , $campus_org_groups));

https://repl.it/@technoknol/StainedHealthyBlogclient

shyammakwana.me
  • 5,562
  • 2
  • 29
  • 50
1

I did something with array_push (doc) simple like:

foreach($array2 as $val){    
    array_push($array1, $val);
}

Tested here withcode below:

<?php

class newObject{
    public $id;
    public $campus_id;
    public $group_id;
    public $created_at;
    public $updated_at;
    
    function create($id, $campus_id, $group_id, $created_at, $updated_at){
        $this->id = $id;
        $this->campus_id = $campus_id;
        $this->group_id = $group_id;
        $this->created_at = $created_at;
        $this->updated_at = $updated_at;
        
    }
    
}

class newObject2{
    public $id;
    public $campus_id;
    public $campus_organization_id;
    public $group_id;
    public $created_at;
    public $updated_at;
    
    function create($id, $campus_id, $campus_organization_id, $group_id, $created_at, $updated_at){
        $this->id = $id;
        $this->campus_id = $campus_id;
        $this->campus_organization_id = $campus_organization_id;
        $this->group_id = $group_id;
        $this->created_at = $created_at;
        $this->updated_at = $updated_at;
        
    }
    
}

$newObject = new newObject;
$newObject->create("1", "1", "1", "2021-03-15T08:15:27.000000Z", "2021-03-15T08:15:27.000000Z");

$newObjectA = new newObject;
$newObjectA->create("2", "1", "1", "2021-03-15T08:15:27.000000Z", "2021-03-15T08:15:27.000000Z");

$array1 = [$newObject, $newObjectA];

$newObject2 = new newObject2;
$newObject2->create("1", "1", "1", "3", "2021-03-15T08:15:50.000000Z", "2021-03-15T08:15:50.000000Z");

$newObject2A = new newObject2;
$newObject2A->create("2", "1", "1", "3", "2021-03-15T08:15:50.000000Z", "2021-03-15T08:15:50.000000Z");

$array2 = [$newObject2, $newObject2A];

foreach($array2 as $val){
    
    array_push($array1, $val);
}

var_dump($array1);

Output final:

array(4) {
  [0]=>
  object(newObject)#1 (5) {
    ["id"]=>
    string(1) "1"
    ["campus_id"]=>
    string(1) "1"
    ["group_id"]=>
    string(1) "1"
    ["created_at"]=>
    string(27) "2021-03-15T08:15:27.000000Z"
    ["updated_at"]=>
    string(27) "2021-03-15T08:15:27.000000Z"
  }
  [1]=>
  object(newObject)#2 (5) {
    ["id"]=>
    string(1) "2"
    ["campus_id"]=>
    string(1) "1"
    ["group_id"]=>
    string(1) "1"
    ["created_at"]=>
    string(27) "2021-03-15T08:15:27.000000Z"
    ["updated_at"]=>
    string(27) "2021-03-15T08:15:27.000000Z"
  }
  [2]=>
  object(newObject2)#3 (6) {
    ["id"]=>
    string(1) "1"
    ["campus_id"]=>
    string(1) "1"
    ["campus_organization_id"]=>
    string(1) "1"
    ["group_id"]=>
    string(1) "3"
    ["created_at"]=>
    string(27) "2021-03-15T08:15:50.000000Z"
    ["updated_at"]=>
    string(27) "2021-03-15T08:15:50.000000Z"
  }
  [3]=>
  object(newObject2)#4 (6) {
    ["id"]=>
    string(1) "2"
    ["campus_id"]=>
    string(1) "1"
    ["campus_organization_id"]=>
    string(1) "1"
    ["group_id"]=>
    string(1) "3"
    ["created_at"]=>
    string(27) "2021-03-15T08:15:50.000000Z"
    ["updated_at"]=>
    string(27) "2021-03-15T08:15:50.000000Z"
  }
}

MaxiGui
  • 6,190
  • 4
  • 16
  • 33