这个问题与Laravel和PHP有关。
我正在构建一个表单,允许用户(玩家)使用复选框分配给团队/取消分配。
许多用户可以属于许多团队。我有一个数据透视表team_user来管理多对多关系。
我无法根据数据透视表中是否存在关联来填充复选框。
到目前为止,我将它们放在两个单独的位中,您可以在下面看到:
我的控制器:
$users_checked = $team->users()->get();
$users = User::all();
return View::make('team/addplayers', compact('users', 'team', 'users_checked'));
我的观点:
@foreach ($users_checked as $user_checked)
<p>
{{ Form::checkbox('player[]', $user_checked->id, true) }}
{{ Form::label('email', $user_checked->email) }}
</p>
@endforeach
@foreach($users as $user)
<p>
{{ Form::checkbox('player[]', $user->id ) }}
{{ Form::label('email', $user->email) }}
</p>
@endforeach
结合&#39;最合理的方法是什么?这些在一个列表中,如果关联存在于枢轴中,则勾选复选框,如果不存在,则不勾选?
非常感谢您的帮助!
答案 0 :(得分:6)
答案让我走上正轨,谢谢。我的实际解决方案如下:
在我的控制器中:
public function showAddPlayer(Team $team)
{
$users = User::all();
return View::make('team/addplayers', compact('users', 'team'));
}
在我看来:
@foreach ($users as $user)
<p>
{{ Form::checkbox('player[]', $user->id, $team->users->contains($user->id)) }}
{{ Form::label('email', $user->email) }}
</p>
@endforeach
答案 1 :(得分:4)
我想你可以尝试这样的事情:
$teams = Team::with('users')->get();
return View::make('team/addplayers', compact('teams'));
在您看来:
@foreach ($teams as $team)
@foreach ($team->users as $user)
<p>
{{ Form::checkbox(
'player[]',
$user->id,
(in_array($user->id, $team->users->fetch('id')) ? 1 : 0)
)
}}
{{ Form::label('email', $user->email) }}
</p>
@endforeach
@endforeach
答案 2 :(得分:2)
{{ Form::checkbox('player[]', $user->id,in_array($user->id, $users_checked->lists('id')) ? 1 : 0 ) }}