2017-09-05 1 views
0

eloquent 쿼리 필터 : I합니다 (OR 주위에 괄호를이 쿼리를 구축 할 수있는 eloquent 코드를 변경하려면 어떻게Laravel 웅변 쿼리 사용하여 건물 또는

where `games_players`.`player_id` = '1' 
and (`active_player_id` = '1' and `stage_name` <> 'setup') 
or (`active_player_id` <> '1' and `stage_name` = 'setup') 

을 :

return $this->games() 
     ->where(function ($query) { 
      $query->where('active_player_id', '=', $this->id) 
       ->where('stage_name', '<>', 'setup'); 
     }) 
     ->orWhere(function ($query) { 
      $query->where('active_player_id', '<>', $this->id) 
       ->where('stage_name', '=', 'setup'); 
     }); 

는 다음과 같이 SQL에 구축) :

where `games_players`.`player_id` = '1' 
and (
    (`active_player_id` = '1' and `stage_name` <> 'setup') 
    or (`active_player_id` <> '1' and `stage_name` = 'setup') 
    ) 
+0

가능한 중복이 같은 첫 번째 익명 함수로 orWhere 조건을 옮겨보십시오 [Laravel 웅변 ORM - 복잡한 곳 쿼리 (https://stackoverflow.com/questions/29036959/laravel- 웅변 - orm-complex-where-queries) –

답변

2

이 작업을 수행하여 그 chieve :

->where('active_player_id',1) 
    ->where(function($q){ 
      $q->where([ ['active_player_id', 1],['stage_name','!=', 'setup'] ]) 
      ->orWhere([ ['active_player_id','!=', 1],['stage_name', 'setup'] ] 
    })->get() 
0

난 그냥 지금에 대해 테스트 할 손을 웅변의 인스턴스를 가지고 있지 않지만 지금은이 같은 것입니까?

return $this->games() 
    ->where(function ($query) { 
     $query->where(function ($query) { 
      $query->where('active_player_id', '=', $this->id) 
       ->where('stage_name', '<>', 'setup'); 
     }) 
     ->orWhere(function ($query) { 
      $query->where('active_player_id', '<>', $this->id) 
       ->where('stage_name', '=', 'setup'); 
     }) 
    }) 
; 

즉, 그룹화 할 조건을 그룹화하여 익명 함수로?

0

return $this->games() 
     ->where(function ($query) { 
      $query->where('active_player_id', '=', $this->id) 
       ->where('stage_name', '<>', 'setup') 
      ->orWhere(function ($query) { 
       $query->where('active_player_id', '<>', $this->id) 
        ->where('stage_name', '=', 'setup'); 
     }); 
     })