2016-05-26 12 views
0

OrWhere +私は次のクエリがありますいくつかの理由からLaravelクエリビルダ -

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_idplayer2_idに異なる行を返します。同じ戦いにいてください。

このクエリで何が問題になっていますか?同じ行に属しているplayer1_idplayer2_idの同じ結果がどのように働いていますか?

+0

'toSql'メソッドを使用してSQL結果を確認できます。あなたが期待しているSQLかどうか確認してください。 – Alfa

+0

それは私に 'select * from' pvp_battles''を表示していますが、私はどこに2つありますか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について詳しくは、こちらをご覧ください。

関連する問題