2014-07-06 48 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我知道我需要'使用',但忘記用圓括號包裝參數 – wired00

2

這不是嚴格你想要做什麼 - 但看起來這是你想要達到的目標。

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

但是,如果你真的想過濾,@ deczo的答案是要走的路。