Фильтрация коллекции с массивом в laravel - PullRequest
0 голосов
/ 04 июня 2018

Я хочу вернуть сайты, на которых зарегистрированный пользователь доступен только для просмотра.Когда пользователь заходит на чужой сайт и вы не находитесь в этой группе, вы не сможете его просматривать.Это должно вернуть только сайты, которые вы связаны с.У меня есть модульное тестирование, и оно проходит, но кажется, что есть лучший способ сделать это.TIA

$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)

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете использовать что-то вроде whereIn () :

$sites = $sites->whereIn('id', $loggedUserSites->pluck('id')->toArray())->all();

Если вы используете> = 5.3, вы также сможете удалить метод ->toArray().

...