2016-05-26 4 views
0

У меня есть следующий запрос:Laravel Query Builder - OrWhere + Где

public function getPvpBattle() 
    { 
     $battle = PvpBattle::where('player1_id','=',$this->id) 
     ->orWhere('player2_id', '=', $this->id) 
     ->where('mode','!=','FINISH') 
     ->first(); 
     if ($battle) return $battle; 
     else 
      return false; 
    } 

По некоторым причинам, он не работает, как освобожденный от каждого пользователя, и она возвращает различные строки для player1_id и player2_id, которые, как предполагается, быть в одной битве.

Что не так в этом запросе и как я могу заставить его работать и повторно использовать тот же результат для player1_id и player2_id который принадлежит к той же строке?

+0

Вы можете проверить результат SQL с помощью метода toSql. Проверьте, не ожидается ли это SQL. – Alfa

+0

это показывает мне 'select * from' pvp_battles'', хотя у меня есть 2, где и 1 OrWhere – TheUnreal

ответ

1

Как насчет использования этого запроса?

$id = $this->id; 

$battle = PvpBattle::where('mode', '!=', 'FINISH') 
    ->where(function ($query) use ($id) { 
     $query->where('player1_id', '=' , $id) 
      ->orWhere('player2_id', '=', $id); 
    }) 
    ->first(); 

Подробнее о предварительном запросе here.