Laravel:如何在控制器中获得多对多关联

时间:2015-08-12 19:57:32

标签: laravel laravel-5 eloquent

在我的体育应用程序中,我希望有一个页面,其中团队成员按照其“活动”状态列在每个团队下面。

涉及的三个模型是团队,用户和团体。 “组”就像每个用户的状态字段。例如,在团队内部,一些玩家处于“活跃”组中,而一些玩家处于非活动状态。

用户可以属于许多团队和许多组(因此两者的关系都是多对多)。组属于团队(多对一)。这三种模型建立了这些关系。

到目前为止,我有一个简单的控制器,可以查找成员的团队并为视图提取这些团队:

class HomeController extends Controller
{
  public function showHome()
  {
    if (Auth::check())
    {
      $user = Auth::user();
      $teams = $user->teams;
      return View::make('indexUser', compact('teams'));
    }
    else
    {
      return View::make('index');
    }
  }
}

在我的indexUser视图中,作为一个简单的测试,我可以执行以下操作来列出用户并在非活动用户旁边添加“*”:

@foreach ($teams as $team)
  @foreach ($team->groups as $group)
    @foreach ($group->users as $user)

      {{$user->first_name}},

      @if($group->name == 'Inactive')
        (inactive)
      @endif
      ,
    @endforeach
  @endforeach
@endforeach

上面的代码输出了这个,它在正确的轨道上:

  

Steven,Wellington,Kirsten,Stacy,Brent,Delbert,Nelle,   Johnpaul,Nora,Nathanael,Effie,Elva,Ophelia,Carlotta,   Dameon,Arnoldo,Emelia,Natalia,Monte(不活跃),Chris   (不活跃),

但是,这会向页面添加6个查询,并且不会让我控制排序。例如,在活动用户之前或之后是否列出非活动成员是绝对可能的。我的预感是,大部分查询应该在控制器中完成,但这就是我击中心理障碍的地方。

关于如何以最有效的方式解决这个问题的任何提示?

0 个答案:

没有答案