根据数据透视表返回选中的复选框

时间:2014-04-19 19:54:19

标签: php laravel laravel-4 eloquent

这个问题与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;最合理的方法是什么?这些在一个列表中,如果关联存在于枢轴中,则勾选复选框,如果不存在,则不勾选?

非常感谢您的帮助!

3 个答案:

答案 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 ) }}