2017-01-27 6 views
-2

Я пытаюсь получить записи из базы данных, в которой игроки играли в качестве игрока 1 или 2 в игре, чтобы рассчитать валовую прибыль для игрока в профиле. У меня есть следующий Advanced Красноречивый код:advanced where clause failed

$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()); 

Но когда я пытаюсь взглянуть на результаты сбрасывали, я вижу пустой массив. Я уверен, что мой идентификатор пользователя установлен правильно. Самое смешное, что он возвращал только один результат, а не все результы в базе данных. Я смущен. Спасибо за помощь в продвижении!

+0

Вам не нужно возвращать запрос внутри обратного вызова? Как 'return $ q-> где (...)' Не помню .. BTW '$ games = $ games_model-> sum ('bet');' не должно работать, так как '$ games_model' - это запрос а не Коллекция. Может быть, '$ games-> sum ('bet');' будет работать. – isa424

+0

Вы пытались использовать некоторое число для тестирования вместо '$ user_id'? – Rashad

+0

Это не продвижение, вы нечетны ... как эти отношения? – jycr753

ответ

0

Что-то вроде этого должно работать, предполагая, что в базе данных и соглашениях об именах следуют.

Пользователи :: класс

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

Запрос:

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

Не проверял, но это должно дать вам идею.

0

вот решение.

global dosen't работает каждый раз в зависимости от переменной области. Я изменил

$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); 

    }); 

и она прекрасно работает каждый раз.