【问题标题】:Get the two different objects together将两个不同的对象放在一起
【发布时间】:2021-06-12 12:39:37
【问题描述】:

我有来自CampusGroup$campus_groups

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

[
    {"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"}
]

$campus_org_groups 来自CampusOrganizationGroup

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

[
    {"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"}
]

并希望像这样将两者结合在一起(重要的关键是group_id,如果省略campus_organization_id,我可以)

[
    {"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"}
]

如果我merge他们

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

这就是我得到的

[
    {"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"}
]

如果我union他们

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

这就是我得到的

[
    {"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"}
]

【问题讨论】:

  • 好的,这就是你得到的。你想要什么
  • @TangentiallyPerpendicular 它在问题中有解释
  • 并非如此。 “希望两者结合”是您想要什么的唯一指示。请发布您所追求的结果示例
  • @brombeer 刚刚包含了它。换句话说,group_id 是感兴趣的关键
  • 你试过$campus_groups + $campus_org_groups吗?

标签: php laravel eloquent laravel-collection laravel-controller


【解决方案1】:

你能测试一下这个解决方案吗:

$obj_merged = (object) array_merge((array) $campus_groups, (array) $campus_org_groups);

【讨论】:

  • 我无法返回,但如果我 dd() 它,只能看到 {#1402 ▼ #items: array:3 [▼ 0 => App\CampusOrganizationGroup {#1420 ▶} 1 => App\CampusOrganizationGroup {#1421 ▶} 2 => App\CampusOrganizationGroup {#1422 ▶} ] }
【解决方案2】:

这是非常简单的操作,array_merge 应该可以工作

<?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

【讨论】:

  • 在这里你做了一个数组数组,但我认为他有一个对象数组。
  • @MaxiGui op 已经发布了 JSON 语法,你不能真的说那是数组数组或对象数组。我只给出了建议。
【解决方案3】:

我对@9​​87654323@ (doc) 做了一些简单的事情,比如:

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

测试here,代码如下:

<?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);

最终输出:

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"
  }
}

【讨论】:

    【解决方案4】:

    我变了

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

    $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']));
    

    注意collect() 的用法以及我真正想要的字段的规范(省略campus_organization_id)。然后,初始合并

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

    将返回所需的输出

    [
        {"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"}
    ]
    

    【讨论】:

    • -&gt;get() 将返回集合,使用collect() 没有区别
    • @shyammakwana.me 那么为什么输出不同呢?
    • 感谢分享答案。
    • @mohammadasghari 哦,当然,我总是这样做!
    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多