Php 高级where子句失败

Php 高级where子句失败,php,laravel,Php,Laravel,我试图从一个数据库中获取记录,在这个数据库中,玩家在一个游戏中扮演玩家1或玩家2,以计算个人资料中某个玩家的毛利。我有以下高级雄辩代码: $user = User::with('profile')->where('name', $username)->first(); $user_id = $user->id; $games_model = Games::where(function ($q) { global $user_id;

我试图从一个数据库中获取记录,在这个数据库中,玩家在一个游戏中扮演玩家1或玩家2,以计算个人资料中某个玩家的毛利。我有以下高级雄辩代码:

 $user = User::with('profile')->where('name', $username)->first();

    $user_id = $user->id;
    $games_model = Games::where(function ($q) {
        global $user_id;
        $q->where('player1', '=', $user_id)->orWhere('player2', '=', $user_id);

    });


    $games = $games_model->limit(3)->get();
    // get gross profits

    $gross_profits = $games_model->sum('bet');

    dd($games_model->get()->toArray());

但是当我试图查看转储的结果时,我看到一个空白数组。我确信我的用户ID设置正确。有趣的是,它之前只返回一个结果,而不是数据库中的所有结果。我很困惑。提前谢谢你的帮助

假设遵循数据库和命名约定,类似的方法应该可以工作

用户::类

public function games()
{
    return $this->hasMany(Games::class);
}
查询:

  Users::where('name', $username)
    ->has('games')
    ->with('profile')
    ->limit(3)
    ->get();
还没有测试过,但这会给你一个想法。

这是解决方案

global
并非每次都有效,具体取决于变量范围。我变了

 $games_model = Games::where(function ($q) {
        global $user_id;
        $q->where('player1', '=', $user_id)->orWhere('player2', '=', $user_id);

    });


而且每次都能完美运行。

您不需要在where回调中返回查询吗?比如
return$q->where(…)
我真的不记得了。。顺便说一句,$games=$games\u model->sum('bet')不应该工作,因为
$games\u model
是查询而不是集合。也许
$games->sum('bet')可以。您是否尝试使用一些数字来代替
$user\u id
进行测试?这不是进步,您很奇怪。。。。这些关系如何?
 $user_id = $user->id;
    $games_model = Games::where(function ($q) use ($user_id) {
        $q->where('player1', '=', $user_id)->orWhere('player2', '=', $user_id);

    });