简体   繁体   中英

How can I pick single record from one to many relation?

I have one to many relation based two tables users and games and there is also bridge table users_games (linking user_id to games).

I want to fetch a single record from games table based on provided game_id for specific user. I did some research and found whereHas() which is returning all games which are belongs to specific user. But I need to fetch one based on game_id . Can some one kindly let me know how can I fix issue in below script

$GameInfo = User::with('games')->whereHas('games', function ($query) use($request)
            {
                $query->where('game_id', '=', $request->game_id);
            })->find(request()->user()->id);

Is this what you're trying to do?

$GameInfo = $request
            ->user()
            ->games()
            ->where('game_id', $request->game_id)
            ->first();

If your relation 'games' is a hasMany() with table 'users_games', You can try this code

$GameInfo = User::with(['games' => function ($query) use($request)
        {
            $query->where('game_id', $request->game_id);
        }])
        ->where('users.id', <user_id_variable>)
        ->first();

And the relation 'games' in User Model as

public function games() 
{ 
    return $this->hasMany('App\Models\UserGames', 'user_id', 'id'); 
}

try this:

$GameInfo = User::with(['games' => function ($query) use($request)
    {
        $query->where('game_id', $request->game_id);
    }])->whereHas('games', function ($query) use($request)
        {
            $query->where('game_id', '=', $request->game_id);
        })->find(request()->user()->id);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM