2014-04-16 3 views
0

메신저를 제거하여 쿼리 결과 모음을 매핑하려고합니다. 특히 해당 컬렉션의 항목이 내 클로저에 적합한 지 확인하고 해당 항목을 반환 한 다음 해당 컬렉션에서 제거 할 것인지 확인하려고합니다. 더 이상 나는 closure 함수로 매개 변수를 전달해야한다.laravel 컬렉션에서 특정 항목을 반환하고

$data = Model::where('something', 'stuff')->get(); 
$res = array(); 
foreach ($x as $y) { 
    $res = $data->each("closure function described above with $y"); 
    // do stuff with $res 
} 

나는이 당신의 도움이 응원 해 주셔서 감사합니다 분명했다 바랍니다.

+0

이 하나처럼 보이는 : 예 https://laravel.com/docs/5.3/collections#method-pull –

답변

0

클로저 안에서 변수를 사용하려면 'use'키워드를 사용해야합니다.

function($item) use ($y) { 
    // remove item from collection by key 
    //using collection.forget($key) 
} 
+0

,하지만 다른 클래스에서 closure 함수를 유지한다면 어떻게 '$ y'를 전달할 것인가? –

+0

질문에 언급하지 않았습니다. 그게 가능한지 나는 모른다. 클래스를 사용하여 클래스에서 클로저를 정의하고 문맥에서 현재 사용 가능한 y가 사용되는지 여부를 테스트 할 수 있습니다. – Fuzzyma

+0

특정하지 않은 것을 유감스럽게 생각합니다. Collection 클래스에서 내 함수를 정의하고 $ 데이터 개체? 아니면 그렇게 나쁜 습관입니까? 고마워요. –

3

당신은 다음과 같은 것을 시도 할 수는 typegeneral 다음 general 입력이있는 모델 일을 할 다음에 그 모델을 넣을 경우 당신이 type으로 $variables$y=general에서 일부 데이터를, 그래서 확인 가정 $res 배열은 다음 컬렉션에서 제거 :

$variables = '...'; 
$res = array(); 
$y = 'general'; // for example, $y contains general 
$data = Model::where('something', 'stuff')->get(); 
foreach ($variables as $variable) { 
    foreach ($data as $key => $model) { 
     if($model->type == $y) { 
      // Do something with $model 
      $res[] = $model; 
      unset($data[$key]); 
     } 
    } 
} 

은 또한 당신이 this article을 확인 할 수 있습니다, 그것은 어쩌면 도움이 Collection 객체와 상호 작용할 수 있습니다.

+0

여기에 제안한 것처럼 내 코드가 있었지만 간단하게/더 짧게 만들고 싶었고 컬렉션 객체 자체의 메서드를 사용하고 싶었습니다. Btw, unset() 대신 collection 객체에서 forget ($ key)를 사용할 수 있습니다. 나는 당신이 게시 한 기사를 읽을 것입니다, 감사합니다! –

+0

'잊어 버린 것보다 빠르기 때문에'unset'을 사용했습니다. 네이티브'PHP' 래퍼 함수를 ​​사용하는 것이 더 좋습니다. –

+0

이 답변은,'unset ($ data [$ key]);', 제가 보통하는 방법입니다. – Salkz

0

laravel 5를 사용하면 수집 방법을 사용할 수 있습니다.

$data = Model::where('something', 'stuff')->get(); 

$removedItem = $data->where('key', 'value'); 

아니면 Larave 4 사용하는 경우는 컬렉션 필터 메소드를 호출 할 수

$removedItem = $data->filter(function($item) use ($removedValue) { 
    return $item->key == $removedValue; 
}); 

$data = $data->diff($removedItem); 
관련 문제