【问题标题】:How can I loop a Eloquent Collection in PHP Laravel?如何在 PHP Laravel 中循环一个 Eloquent 集合?
【发布时间】:2021-02-13 17:39:30
【问题描述】:

我正在尝试使用 Laravel Jetstream Teams 进行自动注册。由于 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。非常感谢。

【问题讨论】:

  • 试试 Laravel Collections filter 方法怎么样。此外,可能还想使用first() 方法来只获得一个结果

标签: php laravel collections eloquent


【解决方案1】:

你可以的

$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 集合助手方法的信息Here

【讨论】:

    【解决方案2】:

    您可以使用 filter 方法来过滤您的收藏,如下链接所示:

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

    你也可以在这里找到很多处理集合的方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 2021-11-20
      • 2014-06-29
      • 2014-11-23
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多