2017-03-28 11 views
0

Laravel의 컬렉션에서 연관 배열을 만들려고 힘듭니다. 그런 다음 케이스 확인을 위해 어레이를 사용해야합니다.컬렉션 목적의 확인을 위해 laravel의 연관 배열을 만듭니다.

내가 이렇게 내 컬렉션을 얻을 :

$collected_items = $user->collected_items()->where('model_id', '=', $model_id)->get(); 

나는 내가 color_id = 0, 1 or 2 만약 내가 다른 코드를 실행해야하기 때문에 color_id를 확인해야 'color_id'

처럼이 컬렉션에서 일부 관련 데이터를 추출해야

모든 사례에 대해 DB 쿼리를 수행하고 싶지 않기 때문에 데이터를로드하고 결합 배열에 넣는 것이 더 좋습니다.

하지만 내 인생 내가이 배열 를 만들 수 없습니다 내가 시도 :

$array_of_colors = [] 

    foreach ($collected_items as $i) { 

        if ($i['color_id'] == 0) { 

         $array_of_colors += ['black' => $i->model_color_id]; 
        } 
        if ($i['color_id'] == 1) { 

         $array_of_colors += ['colored' => $i->model_color_id]; 
        } 
        if ($i['color_id'] == 2) { 

         $array_of_colors += ['white' => $i->model_color_id]; 
        } 


       } 

그럼 내가 다음 할 검은 무언가의 경우이 있는지 확인하기 위해 $array_of_colors을 사용, 흰색 뭔가 기타 등

+1

당신은 실제로 다시 컬렉션을 얻을 당신이'filter' 옵션을 사용으로 보았다? – Pitchinnate

+0

https://laravel.com/docs/5.4/collections#method-filter – Pitchinnate

+1

맞아, 고마워, 필터 된 컬렉션에서 filter() 옵션을 사용하고 max() 및 min()을 사용하여 값을 할당했습니다. 일부 변수가 필요합니다. – Chriz74

답변

0
$array_of_colors = [] 

foreach ($collected_items as $i) { 

       if ($i['color_id'] == 0) { 

        $array_of_colors[] = ['black' => $i->model_color_id]; 
       } 
       if ($i['color_id'] == 1) { 

        $array_of_colors[] = ['colored' => $i->model_color_id]; 
       } 
       if ($i['color_id'] == 2) { 

        $array_of_colors[] = ['white' => $i->model_color_id]; 
       } 


      } 
0

이렇게하는 대신 Laravel에서 사용할 수있는 컬렉션 기능을 사용하는 것이 좋습니다. 특히 나는 filter()이 잘 작동 할 것이라고 생각합니다. 이 같은

https://laravel.com/docs/5.4/collections#method-filter

뭔가 :

$black_items = $collected_items->filter(function ($value, $key) { 
    return $value->model_color_id == 1; 
}); 
+0

예 위와 같이 주석으로 사용했습니다. – Chriz74