2014-07-06 2 views
14

아이디어가 매우 간단하지만 아직 구체화 할 수 없습니다.Laravel : 컬렉션 필터링에 추가 매개 변수를 전달하면

다음은 코드가 실행될 때 나는 오류가 발생

$games = Game::all(); 
    $games_already_added = $member->games()->lists('id'); 

    $games = $games->filter(function($game){ 
     global $games_already_added; 
     if(!in_array($game->id,$games_already_added)){ 
      return true; 
     } 
    }); 

(내가 사용을 설명하는 변수의 이름을 변경 한) 코드의

in_array() expects parameter 2 to be array, null given

변수 $games_already_added이 외부 범위에 정의되어 있고 항목을 포함하고 있는지 확인했습니다.

$games_already_added 변수를 컬렉션의 필터 함수에서 매개 변수로 전달할 수있는 방법이 있습니까?

모든 종류의 제안이나 안내를 부탁드립니다.

감사합니다.

+1

아니면 그냥 return_in_array ($ game-> id, $ games_already_added)' – Yang

+0

@ djay djay를 수행 할 수 있습니다. 그러나 여기 내 문제는 games_already_added 배열에 액세스 할 수 없었습니다. 선! –

답변

47

는 글로벌 아니지만, 클로저와 함께 작동 use :

$games = $games->filter(function($game) use ($games_already_added) { 
    if(!in_array($game->id,$games_already_added)){ 
     return true; 
    } 
}); 
+0

@deczo 다시 한번 감사드립니다! 이것은 확실히 편리하게 올 것이다! –

+1

Grrr 'use'가 필요하다는 것을 알았지 만 인수를 괄호로 묶는 것을 잊어 버렸다. – wired00

2

이것은 당신이 뭘 하려는지 엄격하지 -하지만 당신이 달성하고자하는거야 것 같습니다.

$games_already_added = $member->games()->lists('id'); 
$games = Game::whereNotIn('id', $games_already_added)->get(); 

그러나 실제로 필터링을 수행하려는 경우 @ deczo의 대답은 이동 방법입니다.

관련 문제