Я в настоящее время использую show
функция в моем UserController.php
показать всех пользователей, принадлежащих к определенной компании.
/**
* Show the list of all users.
*
* @return Response
*/
public function show() {
$users = User::where('status',1)->with(['phones', 'companies'])->get(['id', 'first_name', 'last_name', 'email']);
$filteredUsers = [];
foreach($users as $user){
foreach($user->companies as $company){
if($company->id == session('selected_company')){
$filteredUsers[] = $user;
}
}
}
return view('users', ['team_members' => $filteredUsers]);
}
Это прекрасно работает, но я хочу сделать код более элегантным с коллекциями Laravel, надеюсь, с map()
, reject()
или же reduce()
функция
Как я могу это сделать?
Я попробовал reject()
функция, но он продолжает показывать мне всех пользователей в базе данных. Вот что я попробовал:
/**
* Show the list of all users.
*
* @return Response
*/
public function show() {
$users = User::where('status',1)->with(['phones','companies'])->get(['id', 'first_name', 'last_name', 'email']);
$userCollection = collect($users);
$filteredUsers = $userCollection->reject(function ($value) {
$userCompanies = collect($value->companies);
// if user companies contain the id, return that user
if($userCompanies->contains('id', session('selected_company'))){
return $value;
}
});
return view('users', ['team_members' => $filteredUsers->all()]);
}
вам не нужно заставлять собирать снова $ пользователей, попробуйте вот так
$names = $users->reject(function ($user) {
return $user->active === false;
})
->map(function ($user) {
return $user->name;
});
Других решений пока нет …