Laravel - Refactoring to Collections

Makale İçerik Listesi

Filtrelemek

  1. Bir Json içerisindeki nesnelerde X bir özellik o mu? bu mu? şu mu? diye soruyorsak bunu genelde filter metodu ile çözeriz - collection: filter method 
    $products = collect(load_json('products.json')['products']);
    
    $lampsAndWallets = $products->filter(function($product) {
       return collect(['Lamp', 'Wallet'])->contains($product['product_type']);
    })

FlatMap - Transform ve ütüle

  1. Collection'lar üzerinde map() ve flatten(1) işlemi yapabiliriz. 
    $products = collect(load_json('products.json')['products']);
    
    $lampsAndWallets = $products->filter(function($product) {
       return collect(['Lamp', 'Wallet'])->contains($product['product_type']);
    })->map(function($product) {
       return $product['variant'];
    })->flatten(1);

    bu kombinasyon sayesinde dizi içinden bir key'i aldık, sonrada iç içeliği 1 seviye düzleştirerek yeni diziyi o key'den ibaret yaptık. Bunun ikisini bir arada yapabileceğimiz metod flatMap()

  2. Bir collection içindeki nesneler üzerinden geçip farklı bir transformasyon yapmak istersek flatMap metodunu kullanabiliriz. ör. Aşağıdaki örnekte her bir ürün içinden geçip o ürün içindeki variants nesnesini dönüyorum. Böylece yeni dizim sadece variants tan oluşuyor. 
    $products = collect(load_json('products.json')['products']);
    
    $lampsAndWallets = $products->filter(function($product) {
       return collect(['Lamp', 'Wallet'])->contains($product['product_type']);
    })->flatMap(function($product) {
       return $product['variant'];
    });
  3. flatMap bu şekilde diziden yeni bir dizi üretmenin yanı sıra dizi içinde transformasyon yapmak için de kullanılabilir. 
    $collection = collect([
        ['name' => 'Sally'],
        ['school' => 'Arkansas'],
        ['age' => 28]
    ]);
    
    $flattened = $collection->flatMap(function ($values) {
        return array_map('strtoupper', $values);
    });
    
    // ['name' => 'SALLY', 'school' => 'ARKANSAS', 'age' => '28'];

Pluck - Değer Cımbızlamak

  1. Bazen bir dizi içinden tek istediğimiz aslında bir değere sahip olmaktır. 
    ->map(function($item) { return $item['points']; })
    ile amacımız dizideki bütün nesnelerdeki 'points' değerine ulaşmak... bu çok ihtiyaç duyulan operasyon için direk pluck() kullanılabilir.
  2. Bazen de dizinin içinden bir değeri cımbızlamak isteyebiliriz. O zaman pluck() metodunu kullanırız. - doc link 
    $collection = collect([
        ['product_id' => 'prod-100', 'name' => 'Desk'],
        ['product_id' => 'prod-200', 'name' => 'Chair'],
    ]);
    
    $plucked = $collection->pluck('name');
    
    // ['Desk', 'Chair']

Toplama - Nitelikli Toplama

  1. sum() metodu ile dizi içinde toplama yapabiliriz. doc link 
    collect([1, 2, 3, 4, 5])->sum();
    // 15
  2. Ama bu şekilde array elimizde çok olmaz. O yüzden sum('key_name') bir keyname parametresi de alabilir. Bu durumda o keydeki değerleri toplar. 
    $collection = collect([
        ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
        ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
    ]);
    
    $collection->sum('pages');
    // 1272

Adet Sayım

  1. Bazen de değer değil de bir dizi içinde kaç adet olduğunu bulmak isterim. O zaman da yapmam gereken count() - doc link