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

MySQL course to learn queries to manage DBMS.

1. Create Table CREATE TABLE statement allows you to create new table in database. The example code is given below.  create table profile( id int, name varchar(50), birth_date date, phone varchar(12), gender varchar(1) ); Code language: SQL (Structured Query Language) ( sql ) 2. Insert data in table INSERT INTO statement is use to insert new record/data into table. INSERT INTO profile (id, name, birth_date, phone, gender) VALUES (2, "Zaib", "1996-03-15", "9238975404", "M"); Code language: SQL (Structured Query Language) ( sql ) 3. Insert multiple records at-once INSERT INTO state is use to insert multiple new record/data into table. INSERT INTO profile (id, name, birth_date, phone, gender) VALUES (1, "Usamn ali", "1990-08-26", "9238785094", "M", 18, "Karachi"), (2, "Aisha", "1997-06-12", "9238974468", "F", 19, "Lahore"), ...

Send email in php "without less secure" restriction

 => https://www.youtube.com/watch?v=Kjn5vBbBsi8 (less secure link) https://www.youtube.com/watch?v=dNTZ8X9Xk_Q&t=259s https://www.thapatechnical.com/2020/03/how-to-send-mail-from-localhost-xampp.html LARAVEL env file setup for gmail configuration MAIL_DRIVER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=465 MAIL_USERNAME=exampleEmail@gmail.com MAIL_PASSWORD=yourAppPassword MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=exampleEmail@gmail.com MAIL_FROM_NAME="Adnan Zaib" Note: for TLS use Port : 587 for SSL use Port : 465