【问题标题】:Laravel get union between two objectsLaravel 获得两个对象之间的联合
【发布时间】:2021-03-01 09:45:32
【问题描述】:

我有以下内容来获取登录用户拥有的所有组织

$user_owned_orgs = Organization::where('user_id', Auth::user()->id)->get();

并获取登录用户所属的所有组织

$user_orgs = Organization::whereIn('id', function($query){
    $query->select('organization_id')
    ->from(with(new OrganizationUser)->getTable())
    ->where('user_id', Auth::user()->id);
})->get();

考虑到我想要一个两者结合的对象,我测试了运行

$obj_merged = (object) array_merge((array) $user_owned_orgs, (array) $user_orgs);

那么我只有一个组织

{#1362 ▼
  #items: array:1 [▼
    0 => App\Organization {#1390 ▶}
  ]
}

如果我跑步

$user_owner_or_member = array_unique(array_merge($user_owned_orgs->toArray(),$user_orgs->toArray()), SORT_REGULAR);

然后我得到了

array:2 [▼
  0 => array:7 [▼
    "id" => 1
    "name" => "organization1"
    "slug" => "organization1"
    "is_visible" => 0
    "user_id" => 1
    "created_at" => "2021-02-12T10:14:23.000000Z"
    "updated_at" => "2021-02-12T10:14:23.000000Z"
  ]
  1 => array:7 [▼
    "id" => 5
    "name" => "organization12"
    "slug" => "organization12"
    "is_visible" => 1
    "user_id" => 1
    "created_at" => "2021-03-01T08:34:25.000000Z"
    "updated_at" => "2021-03-01T08:34:25.000000Z"
  ]
]

虽然结果在显示两条记录的意义上是正确的,但它是一个数组。这意味着需要修改为处理对象而创建的视图(这很好,但并不理想)。将其更改为以下方式的对象也不是一种选择

(object) array_unique(array_merge($user_owned_orgs->toArray(),$user_orgs->toArray()), SORT_REGULAR);

换句话说,我要说的是(这可能是最简单的选择)是如何更改查询以获取登录用户拥有的所有组织 (organization.user_id = Auth::user()->id) 和/或同一用户是其成员(organization_users.organization_id = organization.id AND organization_users.user_id = Auth::user()->id)?

【问题讨论】:

    标签: php laravel object eloquent


    【解决方案1】:

    您在 Eloquent 中使用 Eloquent 和更好的解决方案来合并两个结果是这样的:

    $obj_merged = $user_owned_orgs->merge($user_orgs);
    

    现在你有了一个包含所有有用属性的 Eloquent 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 2015-04-27
      • 2015-08-22
      • 2013-04-12
      相关资源
      最近更新 更多