我有两张table:Videogames包含视频游戏列表,videojuegos_蒂嫩_usuarios包含用户选择的视频游戏。我想要的是显示视频游戏列表,如下面的图片,选择输入显示所有可用的视频游戏和复选框是用户已经选择的视频游戏。此外,用户应该能够编辑视频游戏,选择新的或删除他/她已经选择的游戏。我尝试了下面的代码,但我没有得到任何结果。
先谢了
表:videojuegos_蒂嫩_usuarios
控制器**
public function editGamesUser(int $id)
{
$user = Usuario::findOrFail($id);
return view('admin.videojuegos.usuarios', [
user => $user,
]);
}
public function editExecuteGamesUsers(Request $request, int $id)
{
$request->validate(User::VALIDATE_RULES, User::VALIDATE_MESSAGES);
$user = User::findOrFail($id);
$data = $request->except(['_token']);
try {
DB::transaction(function() use ($user, $data) {
$user->update($data);
$user->usersVideogames()->sync($data['videojuegos_tienen_usuarios'] ?? []);
});
return redirect()
->route('admin.videojuegos.users)
->with('statusType', 'success')
->with('statusMessage', 'The videogames were updated.');
} catch(\Exception $e) {
return redirect()
->route('admin.videojuegos.usuarios', ['id' => $id])
->with('statusType', 'danger')
->with('statusMessage', 'Error.')
->withInput();
}
}
游戏模型
protected $table = 'videogames';
protected $primaryKey = 'videogames_id';
protected $fillable = ['plataforma_id', 'titulo', 'subtitulo', 'precio', 'fecha_estreno', 'sinopsis', 'contenido' , 'portada', 'portada_juego', 'portada_descripcion', 'categoria_id', 'numjugadores_id', 'img_descripcion'];
public function users()
{
return $this->belongsToMany(
User::class,
'videojuegos_tienen_usuarios',
'videogames_id',
'user_id',
'videogames_id',
'user_id',
);
}
用户模型
public function usersVideogames()
{
return $this->belongsToMany(Videogames::class, 'usuarios_tienen_videojuegos', 'user_id', 'videogames_id');
}
public function getGameId(): array
{
return $this->videogames->pluck('videogames_id')->toArray();
}
HTML
我正在显示用户选择的游戏,但我试图做的是显示所有的视频游戏,并显示用户选择的视频游戏所选择的输入。
@foreach($user->usersVideogames as $game)
<div class="form-check form-check-inline">
<input
type="checkbox"
name="videogames[]"
value="{{ $game->videogames_id }}"
@checked($user->usersVideogames)
>
<label for="game-{{ $game->videogames_id }}" class="form-check-label">{{ $game->subtitle }}</label>
</div>
@endforeach
<button type="submit">Update Games</button>
2条答案
按热度按时间cfh9epnr1#
7eumitmz2#
您需要从DB列表中获取所有游戏,然后检查是否包含用户偏好的游戏: