Skip to main content

Mostly use of collection methods in laravel

Example code here.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Str;
class CollectionController extends Controller
{
    const PROJECT_TYPES = [
        'action',
        'base resource',
        'A W S',
        'lara beans'
    ];

    const MOVIES_TYPES = [
        ['id'=>1,'name'=>'action'],
        ['id'=>2,'name'=>'base resource'],
        ['id'=>3,'name'=>'A W S'],
        ['id'=>4,'name'=>'lara beans']
    ];
    function mapWithSlugs() {
        dump('Convert name of arrays into slug using Slug function and iterate array
with map function');
        $slugs = [];
        foreach(self::PROJECT_TYPES as $name){
            $slugs[] = Str::slug($name);
        }

        return $slugs;

        return collect(self::PROJECT_TYPES)->map(function ($name) {
            return 'ESE_'.Str::slug($name);
        })->toArray();
    }

    function mapWithKeys() {
        dump('Convert value of arrays into keys. And also make other index value
to someother key value using mapWithKeys method, Note: it will return us object');
        return collect(self::MOVIES_TYPES)
        ->mapWithKeys(function ($name) {
            return [$name['id'] => Str::slug($name['name'])];
        })->toArray();

        //output : {"1":"action","2":"base-resource","3":"a-w-s","4":"lara-beans"}
    }

    function eachMethod(){
        dump("This is seeder example where we can create 'users' than for each other
create 'listing' than assign/attach these listing with 'tags'.");
        $tags = Tag::factory(20)->create();

        User::factory(10)->create()->each(function ($user) use($tags) {
            Listing::factory(rand(1,4)->create([
                'user_id' => $user->id
            ]))->each(function ($listing) use($tags) {
                $listing->tags()->attach($tags->random(2));
            });
        });
    }

    function pushMethod(){
        $old_movies = self::MOVIES_TYPES;
        $new_movies = collect();

        collect($old_movies)->map(function($old_movies) use($new_movies) {
            $new_movies->push($old_movies['name']);
        });

        return $new_movies[2];
    }

    function filterMethod() {
        $collection = collect([
            ['name'=>'adnan','age'=>18],
            ['name'=>'zaib','age'=>20],
            ['name'=>'arsalan','age'=>12],
            ['name'=>'rao','age'=>11]
        ]);

        $filtered = $collection->filter(function ($name) {
            return substr($name['name'], 0,1) == 'A' || substr($name['name'], 0,1) == 'a' && $name['age'] >= 18;

        });
        // to json
        return $filtered->values()->all();
    }

    function pluckMethod() {
        $collection = collect([
            ['name'=>'adnan','age'=>18],
            ['name'=>'zaib','age'=>20],
            ['name'=>'arsalan','age'=>12],
            ['name'=>'rao','age'=>11]
        ]);

        $filtered = $collection->pluck('name');
        // to json
        return $filtered->values()->all();
    }

    function containMethod() {
        dump("contains method work similar to filter method but it return ");
        // with simple array
        // $collection = collect([
        //  'adnan',
        //  'zaib',
        //  'arsalan',
        //  'rao'
        // ]);
        // with nested associative array.
         $collection = collect([
            ['name'=>'adnan','age'=>18],
            ['name'=>'zaib','age'=>20],
            ['name'=>'arsalan','age'=>12],
            ['name'=>'rao','age'=>11]
        ]);

        $contains = $collection->contains(function ($item) {
            return substr($item['name'], 0,1) == 'b';
        });
        // to json
        return $contains ? 'array contains' : 'array does not contain';
    }

    function partitionMethod() {
        dump("This method much like with filter and contains. It uses closure
function containing the current item in the array.");
        dump("Using this we get two array of data. One array is the output of
our condition(login) and second array is the reverse the condition(login");

        $collection = collect([
            'adnan',
            'zaib',
            'arsalan',
            'rao'
        ]);

        [$aboveFive, $underFive] = $collection->partition(function($item) {
            return strlen($item) > 5;
        });

        // return $aboveFive;
        return $underFive->values()->all();

        // output : ["adnan","zaib","rao"]
    }

    function eachMethod2(){
        $collection = collect([
            ['banana',23,'lahore'],
            ['apple',56,'kashmir'],
            ['sugar cane',20,'pindi']
        ]);

        $collection->each(function($value) {
            dump("We have {$value[1]} {$value[0]} in our store {$value[2]}.");
        });

         dump("Note: problem is that it is dificult to determine which index
contain which value.to solve that issue we have eachSpread method.");

        $collection->eachSpread(function($product,$qty,$location) {
            dump("We have {$qty} {$product} in our store {$location}.");
        });
    }

} 


Some other useful method use to manipulate the data of the collection.

1. each method

$users = \App\User::get();
    // for each loop mostly use to modify data on each iteration
    // each method return us whole collection
    $output = $users->each(function($user){
        $user->isActive = rand(0,1);
        $user->year = date('Y');
        unset($user->updated_at);
    });
    dd($output);

2. filter method

filter method condtionally work, mean based on condition it return data.

$users = \App\User::get();
    $output = $users->filter(function($user){
        return $user->id < 5;
    });
    dd($output->toArray());

toArray() method will convert the eloquant modal data into array data.

3. search method

This method return the index number, position of fata inside the collection array.

$users = \App\User::get();
    // search method on array
    $list = $users->pluck('email');
    $output = $list->search('asdnanzaib486@gmail.com');
    dd($output);

Note: all() method convert data / return data in array. collection method aply on collections record.

Comments

Popular posts from this blog

Install MariaDB Latest Version 11.4 in Red Hat Version 9

 This this post i will show you step by step the installation process of mariaDB in red hat version 9. Step1 Run the command to pull the latest updated packages on applications installed in your system. -dnf update If you get Kernal update than reboot the system -reboot Step2 Go to official mariaDB site Make mariadb repository in /etc/yum.repos.d Place the configuration in this file # MariaDB 11.4 RedHatEnterpriseLinux repository list - created 2024-09-24 11:12 UTC # https://mariadb.org/download/ [mariadb] name = MariaDB # rpm.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details. # baseurl = https://rpm.mariadb.org/11.4/rhel/$releasever/$basearch baseurl = https://mirrors.aliyun.com/mariadb/yum/11.4/rhel/$releasever/$basearch # gpgkey = https://rpm.mariadb.org/RPM-GPG-KEY-MariaDB gpgkey = https://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck = 1 Now install the mariaDB with its dependencies package...

3_Abstract Factory Pattern

Abstract factory pattern provide concept of factory of factories.  Abstract design pattern is on of the creational design pattern that provide us the interface of creating related or independent objects without specifying the concrete classes and their specifications. In other words,  Abstract design pattern is the way of organizing, How we can create groups of things that are related to each other. Think of it, like factory of factories. Let walk through the practical example of car production system using abstract factory design pattern for getting better understanding. Scenario: we are building card of two different types , ElectricCars and PetrolCars. Each car have different types of  1) Engine 2)Tyres Goals: Using abstract design pattern we have to create families of Electric and Petrol car parts. What types of classes will be use in this design pattern. 1) Abstract Products (Interface). 2) Concrete Products: These are concrete classes which implement Abstract Produ...

How to find out if a package is installed in Linux?

1) How to find out if a package is installed or not in Linux There are multiple ways to check find locate package is installed in linux machine or not 1.a) Using which command The  ‘which’  command returns an executable path that can be executed when the command is entered in the terminal. # which vi /usr/bin/vi 1.b) Using whereis command The  ‘whereis’  command is used to search the binary, source, and man page files for a given command. # whereis vi vi: /usr/bin/vi /usr/share/man/man1/vi.1p.gz /usr/share/man/man1/vi.1.gz 1.c) Using locate command The  ‘locate’  command performs faster than the find command because it uses an updatedb database, whereas the find command searches in real time. # locate --basename '\nano' /usr/bin/nano /usr/share/nano /usr/share/doc/nano 2) How to find out whether a package is installed or not in Linux, using package manager 2.a) On CentOS / Red Hat (RHEL) 6/7 Use  yum command  or  rpm command  to deter...