You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel实现展示用户最常选择的游戏(含游戏名称)

问题描述

我有一张名为usuarios_tienen_videojuegos的中间表,包含user_id和videogames_id字段。我想要展示用户最常选择的电子游戏,目前仅能显示游戏ID,还需显示存储在Videogames表中的游戏名称,该如何实现?

现有代码

控制器(Controller)

public function usuariosVista()
{
    $videogames = Videogames::with(['plataforma', 'generos', 'categoria', 'numJugadores', 'users'])->get();
    $users = User::with('usersVideogames')->get();

    $PopularGames = DB::table('usuarios_tienen_videojuegos')
    ->select('videogames_id', DB::raw('COUNT(*) as seleccionados_count'))
    ->groupBy('videogames_id')
    ->orderByDesc('seleccionados_count')
    ->take(5)
    ->get();

    return view('admin.videojuegos.usuarios', [
        'videogames' => $videogames,
        'users' => $users,
        'PopularGames' => $PopularGames,
    ]);
}

视图(Blade)

@foreach($PopularGames as $game)
    <li>{{ $game->videogames_id }} (Selected by {{ $game->seleccionados_count }} users)</li>
@endforeach

User模型

public function usersVideogames()
{
    return $this->belongsToMany(VideoJuegos::class, 'usuarios_tienen_videojuegos', 'user_id', 'videogames_id');
}

解决方案

你可以通过关联查询Videogames表获取游戏名称,以下是两种实用实现方式:

方式一:DB查询构建器关联表

修改控制器中$PopularGames的查询逻辑,通过join关联Videogames表并选择游戏名称字段:

$PopularGames = DB::table('usuarios_tienen_videojuegos')
    ->join('videogames', 'usuarios_tienen_videojuegos.videogames_id', '=', 'videogames.id')
    // 替换nombre为你实际的游戏名字段,比如name
    ->select('videogames.id', 'videogames.nombre as game_name', DB::raw('COUNT(*) as seleccionados_count'))
    ->groupBy('videogames.id', 'videogames.nombre')
    ->orderByDesc('seleccionados_count')
    ->take(5)
    ->get();

视图中直接调用game_name字段展示:

@foreach($PopularGames as $game)
    <li>{{ $game->game_name }} (被 {{ $game->seleccionados_count }} 位用户选择)</li>
@endforeach

方式二:Eloquent关联统计(更符合Laravel风格)

先确保Videogames模型中定义了与User的多对多关联:

// Videogames模型代码
public function users()
{
    return $this->belongsToMany(User::class, 'usuarios_tienen_videojuegos', 'videogames_id', 'user_id');
}

然后修改控制器的$PopularGames查询,利用Eloquent的withCount自动统计关联数量:

$PopularGames = Videogames::withCount('users')
    ->orderByDesc('users_count')
    ->take(5)
    ->get();

视图中直接使用模型字段展示:

@foreach($PopularGames as $game)
    <li>{{ $game->nombre }} (被 {{ $game->users_count }} 位用户选择)</li>
@endforeach

这种方式代码更简洁,也更符合Laravel的ORM设计理念。


内容的提问来源于stack exchange,提问作者designArg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:45:18