Как я могу зациклить красноречивую коллекцию в PHP Laravel?


Как я могу зациклить красноречивую коллекцию в PHP Laravel?

31.10.2020 04:35:25 Просмотров 2 Источник

Я пытаюсь использовать команды Laravel Jetstream для автоматической регистрации. Из-за того, что Jetstreams требует "личной команды", а мое приложение требует, чтобы пользователи были отделены от конкретных команд, я нашел способ обойти его до attach пользователь в команде, а затем switchTeam, чтобы их текущая команда загружалась так же, как их личная команда.

Чтобы это сработало, я отключил ручную регистрацию, отключил возможность создавать новые команды и отключил возможность людям покидать команды. Это экономит время, необходимое для удаления личных команд из Jetsteam.

При этом, поскольку приложение автоматически создает пользователей (из электронной таблицы), мне также нужно назначить команду этому пользователю. Я пытаюсь перебрать каждый Team::all, но ответ представляет собой массив, поэтому мой array_filter возвращает ошибку из-за объекта, заданного в качестве параметра.

protected function assignTeam(User $user)
{
    $team = array_filter(Team::all(), function(Team $team) {
        // teamToAssign dervies from Spreadsheet data
        return strtoupper($team->name) === strtoupper($this->teamToAssign);
    });
    
    if(!empty($team)) // User error can exist in data
    {
        Team::find($team->id)->users()->attach($user, ['role' => 'participant']);
        User::find($user->id)->switchTeam(Team::find($team->id));
        return;
    }

    // TODO: Deal with user error
}

Может ли кто-нибудь пролить свет на то, как я могу подойти к этому? Я новичок в Laravel и не уверен, что есть лучший способ перебрать Eloquent Collections. Заранее большое спасибо.

У вопроса есть решение - Посмотреть?

Ответы - Как я могу зациклить красноречивую коллекцию в PHP Laravel? / How can I loop a Eloquent Collection in PHP Laravel?

Является ответом!
mmabdelgawad

31.10.2020 04:40:24

Ты можешь это сделать

$teams = Team::all()->toArray(); // this will convert collection to array 

// or

Team::all()->each(function (Team $team) { // this will allow you to loop through the collection 

   // TODO ...

});

Team::all()->filter(function (Team $team) { // this will allow you to filter unwanted instances

   // TODO ...

});

Для получения дополнительной информации о методах Laravel Collection Helper здесь

Ziad Adeela

31.10.2020 04:41:06

Вы можете использовать метод filter для фильтрации вашей коллекции, как показано в следующей ссылке:

https://laravel.com/docs/8.x/collections#method-filter

Вы также можете найти здесь множество методов работы с коллекциями

Помочь в развитии проекта:
Закрыть X