2016-11-30 55 views
0

我不希望刪除重複值,我想獲得articles_id重複和總結他們的數量值,例如,這是我的收藏:使用Laravel收集得到重複的值

Collection {#306 ▼ 
    #items: array:3 [▼ 
    0 => CartLine {#294 ▼ 
     +quantity: 2 
     +article_id: 1728 
     +article_name: "TAZA CERAMICA" 
    } 
    1 => CartLine {#296 ▼ 
     +parent_line_id: null 
     +quantity: 1 
     +article_id: 1728 
     +article_name: "TAZA CERAMICA" 
    } 
    2 => CartLine {#298 ▼ 
     +quantity: 1 
     +article_id: 1378 
     +article_name: "JARRA CERVEZA ALEMANA" 

    } 
    ] 
} 

而且我希望得到這樣的結果:

Collection {#306 ▼ 
    #items: array:3 [▼ 
    0 => CartLine {#294 ▼ 
     +quantity: 3 //sum total quantity of the duplicates elements with same article_id 
     +article_id: 1728 
     +article_name: "TAZA CERAMICA" 
    } 
    1 => CartLine {#296 ▼ 
     +parent_line_id: null 
     +quantity: 3 
     +article_id: 1728 
     +article_name: "TAZA CERAMICA" 
    } 
    2 => CartLine {#298 ▼ 
     +quantity: 1 
     +article_id: 1378 
     +article_name: "JARRA CERVEZA ALEMANA" 

    } 
    ] 
} 

我想總結的重複元素的數量和在這些元素的總和設置數量屬性。

回答

1

你可以嘗試這樣的:

$collection->groupBy('article_id')->flatMap(function ($items) { 

    $quantity = $items->sum('quantity'); 

    return $items->map(function ($item) use ($quantity) { 

     $item->quantity = $quantity; 

     return $item; 

    }); 

}); 

顯然,改變$collection是不管你叫保存您的收藏變量。

希望這會有所幫助!

4

我知道這個答案已經被接受,但我剛剛發現這個StackOverflow後,當我正在尋找同樣的事情。我最終做的是以下。

$users = Users::all(); 
$usersUnique = $users->unique('id'); 
$usersDupes = $users->diff($usersUnique); 

dd($users, $usersUnique, $usersDupes); 

我只需要我的一次性目的,所以我不確定如果您需要在生產頁面上使用它,性能如何。