高级where子句失败

时间:2017-01-27 20:26:09

标签: 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;
        $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已正确设置。有趣的是它只返回一个结果而不是数据库中的所有结果。我糊涂了。我在这里先向您的帮助表示感谢!

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效,假设遵循数据库和命名约定。

用户::类

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

查询:

  Users::where('name', $username)
    ->has('games')
    ->with('profile')
    ->limit(3)
    ->get();

尚未测试,但这应该给你一个想法。

答案 1 :(得分:0)

这是解决方案。

global每次都根据变量范围进行工作。我改变了

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

    });

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

    });

每次都很完美。