Laravel得到两个对象之间的并集



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

$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 => AppOrganization {#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)的成员?

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

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

现在你有一个Eloquent对象和所有有用的属性。

最新更新