2016-09-26 2 views
0

Мне нужно сделать запрос, где мне нужно проверить, имеют ли последние две строки столбец answered, равный строке 'not'. Это условие, если цикл в моем контроллере:Laravel - запрос, где последние два равны

$inactive = Answer::orderBy('created_at', 'desc') 
          ->where('answered', 'not') 
          ->where('player_id', $player->id) 
          ->where('quiz_id', $quiz->id) 
          ->take(2); 

if ($inactive) { 
       // The game was finished 
       $opponent = $quiz->getOpponent($player); 
       $quiz->status = 'finished'; 
       $quiz->save(); 

       Event::fire(new GameEvent(
        'quizFinished', 
        [ 
         $opponent->user, 
         $player->user, 
        ], 
        [] 
       )); 
      } 

Но это не работает, как я ожидал, так как если цикл быть введен даже тогда, когда оно не должно быть.

ответ

0

Вы сделали очень небольшую ошибку

$inactive = Answer::orderBy('created_at', 'desc') 
          ->where('answered', 'not') 
          ->where('player_id', $player->id) 
          ->where('quiz_id', $quiz->id) 
          ->take(2) 
          ->get(); 

Обратите внимание на ->get().

Без этого $inactive по-прежнему является красноречивым объектом. что означает, что он не является нулевым.

https://laravel.com/docs/5.1/eloquent#retrieving-multiple-models

0
$inactive = Answer::orderBy('created_at', 'desc') 
          //->where('answered', 'not') 
          ->where('player_id', $player->id) 
          ->where('quiz_id', $quiz->id) 
          ->take(2); 

if ($inactive->count() == 2 && $inactive->first()->answered == 'not' && $inactive->last()->answered == 'not') { 
       // The game was finished 
       $opponent = $quiz->getOpponent($player); 
       $quiz->status = 'finished'; 
       $quiz->save(); 

       Event::fire(new GameEvent(
        'quizFinished', 
        [ 
         $opponent->user, 
         $player->user, 
        ], 
        [] 
       )); 
      } 
Смежные вопросы