使用laravel中的数组筛选集合
我想返回登录用户只能查看的站点。当用户访问其他人的网站而您不在该组中时,您应该无法查看该网站。这应该只返回与您关联的站点。我对此有一个单元测试,它通过了,但似乎有更好的方法。短暂性脑缺血发作使用laravel中的数组筛选集合,laravel,laravel-collection,Laravel,Laravel Collection,我想返回登录用户只能查看的站点。当用户访问其他人的网站而您不在该组中时,您应该无法查看该网站。这应该只返回与您关联的站点。我对此有一个单元测试,它通过了,但似乎有更好的方法。短暂性脑缺血发作 $user = $this->userRepo->findUserById($userId); $userRepo = new UserRepository($user); $sites = $userRepo->findSites(); $loggedUser = app('req
$user = $this->userRepo->findUserById($userId);
$userRepo = new UserRepository($user);
$sites = $userRepo->findSites();
$loggedUser = app('request')->user();
$loggedUserSites = $loggedUser->sites()->get()->all();
// Return only the sites of the user being access that is the same with the currently logged user
$sites = $sites->filter(function (Site $site) use ($loggedUserSites) {
foreach ($loggedUserSites as $userSite) {
if($site->id === $userSite->id) {
return $site;
};
}
});
// user 1: [1,2,3] - `/users/2/sites` - should return [1,2] (default since user 2 is only associated with this 2 sites)
// user 2: [1,2] - `/users/1/sites` - should return [1,2] (no 3 since user has no site #3)
您可以使用以下内容:
如果您使用的是>=5.3,您应该能够删除
->toArray()
方法。是否$loggeduseristes
是一个集合?
$sites = $sites->whereIn('id', $loggedUserSites->pluck('id')->toArray())->all();