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...

Car Company website Proposal Document.

 Car Company Website Proposal Document. What this website offers and give value to company and its customers. This site will showcase the products (vehicles) with simple and sleek design. It will show high impact vehicles images. The specification of vehicle which user can easily understand and make comparisons.  Features of this website both Front-End and Back-End side. Front-End Features 1. Landing page of website 1.1 This page will display classy look of the web design by showcasing different vehicle high resolution images. 1.2 Overview of all Services the company offering to their valuable customers 1.3 Testimonials Client feedback on your services and satisfaction with vehicle which build long term value to company and customer relationship. 1.4 Window Pop-up for showing  sales and events or any news. 2. Pages on this website 2.1 Services Page This page will demonstrate number of Maintenance Services of vehicles this company offers. Now there are two types of service...

React js Commands

Navigation   1. Install React Router Dom npm install react-router-dom npm install react-router-dom@6