Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      CodeSOD: A Unique Way to Primary Key

      July 22, 2025

      BrowserStack launches Figma plugin for detecting accessibility issues in design phase

      July 22, 2025

      Parasoft brings agentic AI to service virtualization in latest release

      July 22, 2025

      Node.js vs. Python for Backend: 7 Reasons C-Level Leaders Choose Node.js Talent

      July 21, 2025

      The best CRM software with email marketing in 2025: Expert tested and reviewed

      July 22, 2025

      This multi-port car charger can power 4 gadgets at once – and it’s surprisingly cheap

      July 22, 2025

      I’m a wearables editor and here are the 7 Pixel Watch 4 rumors I’m most curious about

      July 22, 2025

      8 ways I quickly leveled up my Linux skills – and you can too

      July 22, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      The Intersection of Agile and Accessibility – A Series on Designing for Everyone

      July 22, 2025
      Recent

      The Intersection of Agile and Accessibility – A Series on Designing for Everyone

      July 22, 2025

      Zero Trust & Cybersecurity Mesh: Your Org’s Survival Guide

      July 22, 2025

      Execute Ping Commands and Get Back Structured Data in PHP

      July 22, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      A Tomb Raider composer has been jailed — His legacy overshadowed by $75k+ in loan fraud

      July 22, 2025
      Recent

      A Tomb Raider composer has been jailed — His legacy overshadowed by $75k+ in loan fraud

      July 22, 2025

      “I don’t think I changed his mind” — NVIDIA CEO comments on H20 AI GPU sales resuming in China following a meeting with President Trump

      July 22, 2025

      Galaxy Z Fold 7 review: Six years later — Samsung finally cracks the foldable code

      July 22, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»Laravel 11 CRUD Operation

    Laravel 11 CRUD Operation

    May 4, 2025

    In this tutorial, we will learn how to create a CRUD Operation using Laravel 11.

    Step 1: Install Laravel

    composer create-project laravel/laravel crud-app

    Step 2: Set Up Your Environment
    Make sure your MySQL database is properly configured. In your .env file, configure the database connection:

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=laravelcruddb
    DB_USERNAME=root
    DB_PASSWORD=

    Step 3: Create the MySQL table (users)

    Table structure for table users

    CREATE TABLE `users` (
      `id` int(11) NOT NULL,
      `firstName` varchar(255) DEFAULT NULL,
      `lastName` varchar(255) DEFAULT NULL,
      `emailId` varchar(255) DEFAULT NULL,
      `phoneNumber` bigint(12) DEFAULT NULL,
      `streetAddress` text DEFAULT NULL,
      `zipCode` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

    Step 4:Create a balde file for data insertion

    update.blade.php (resources/views/insert.blade.php)

    <div class="formbold-main-wrapper">
        <div class="formbold-form-wrapper">
    
          <form action="{{ route('adduser') }}" method="post">
            @csrf
            <div class="formbold-form-title">
              <h2 class="">Register now    ----------- <small>
                <a  href="{{ route('read') }}"> View Data</a>
            </small> </h2>
              <hr />
              <ul style="color:red; margin-top:2%" >
              @if($errors->all())
              @foreach ($errors->all() as $error) 
              <li>{{ $error }}</li>
              @endforeach
              @endif
              </ul>
    
            </div>
    
    
            <div class="formbold-input-flex">
              <div>
                <label for="firstname" class="formbold-form-label">
                  First name
                </label>
                <input
                  type="text"
                  name="firstname"
                  id="firstname"
                  value="{{ old('firstname') }}"
                  class="formbold-form-input  @error('firstname') is-invalid @enderror"
                />
              </div>
         
              <div>
                <label for="lastname" class="formbold-form-label"> Last name </label>
                <input
                  type="text"
                  name="lastname"
                  id="lastname"
                  class="formbold-form-input"
           
                /> 
              </div>
             
            </div>
      
            <div class="formbold-input-flex">
              <div>
                <label for="email" class="formbold-form-label"> Email </label>
                <input
                  type="email"
                  name="email"
                  id="email"
                  class="formbold-form-input"
                /> 
              </div>
    
         
              <div>
                <label for="phone" class="formbold-form-label"> Phone number </label>
                <input
                  type="text"
                  name="phone"
                  id="phone"
                  class="formbold-form-input"
                />
              </div>
            </div>
      
            <div class="formbold-mb-3">
              <label for="address" class="formbold-form-label">
                Street Address
              </label>
              <input
                type="text"
                name="address"
                id="address"
                class="formbold-form-input"
              />
            </div>
      
      
            <div class="formbold-input-flex">
              <div>
                <label for="post" class="formbold-form-label"> Post/Zip code </label>
                <input
                  type="text"
                  name="post"
                  id="post"
                  class="formbold-form-input"
                />
              </div>
        
            </div>
      
      
            <button class="formbold-btn" type="submit">Register Now</button>
          </form>
        </div>
      </div>
      <style>

    Step 5: Create a Model and migration
    Create a model that will correspond to the database table you want to insert data into. You can do this using the artisan command:

    pphp artisan make:model your_ModelName
     
    //for this tutorial
    php artisan make:model user

    You define the table name and fields that are mass assignable (e.g., firstname, LastName, emailId) in this model.

    app/Models/Users.php

    <?php
    use IlluminateDatabaseMigrationsMigration;
    use IlluminateDatabaseSchemaBlueprint;
    use IlluminateSupportFacadesSchema;
    
    return new class extends Migration
    {
        /**
         * Run the migrations.
         */
        public function up(): void
        {
            Schema::create('users', function (Blueprint $table) {
                $table->id();
                $table->string('firstName',200);
                $table->string('lastName',200)->nullable();
                $table->string('emailId','200');
                $table->bigInteger('phoneNumber')->unsigned();
                $table->text('streetAddress');
                $table->integer('zipCode')->unsigned();
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         */
        public function down(): void
        {
            Schema::dropIfExists('users');
        }
    };

    Step 6: Create a controller for handling user inputs and insert/read/update/delete the data into the database.

    php artisan make:controller your_contollername
    //For this tutorial
    php artisan make:controller crudController

    app/Http/Controllers/crudController.php

    <?php
    
    namespace AppHttpControllers;
    use IlluminateHttpRequest;
    use IlluminateSupportFacadesDB;
    use AppHttpModelsUser;
    
    class crudController extends Controller
    {
        public function addUser(Request $request){
            $request->validate([
    'firstname' => 'required',
    'lastname' => 'required',
    'email' => 'required',
    'phone' => 'required|numeric',
    'address' => 'required',
    'post' => 'required'
    
            ]);
            $user=DB::table('users')
            ->insert([
                'firstName' => $request->firstname,
                'lastName' => $request->lastname,
                'emailId' => $request->email,
                'phoneNumber' => $request->phone,
                'streetAddress' => $request->address,
                'zipCode' => $request->post,
    
            ]);
      
            if($user){
                return redirect()->route('read')->with('success', 'Data inserted successfully.');
            } else{
                return redirect()->route('read')->with('error', 'Something went wrong . Please Try again.');
            }
        }
    }

    Step7: Add a Route to Handle the Form Submission

    <?php
    
    use AppHttpControllerscrudController;
    use IlluminateSupportFacadesRoute;
    
    Route::get('/', function () {
        return view('insert');
    });
    Route::controller(crudController::class)->group(function (){
        Route::post('/adduser','addUser')->name('adduser');
    });

    Step 8: We have already created crudController; now, we will add the function to show the inserted data in that controller.

    public function showUser(){
        $users=DB::table('users')
                     ->paginate(5);
        return view('read',['data' => $users]);
    }

    Step 9: Create a blade template to display/show data.

    update.blade.php (resources/views/read.blade.php)

    <div class="container-lg">
        <div class="table-responsive">
            <div class="table-wrapper">
                <div class="table-title">
                    <div class="row">
                        <div class="col-sm-8"><h2>User <b>Details</b></h2></div>
                        <div class="col-sm-4">
                            <a class="btn btn-info add-new" href="{{ route('insert') }}"><i class="fa fa-plus"></i> Add New</a>
                        </div>
                    </div>
                </div>
                @if(session('success'))
                <div class="alert alert-success">
               {{ session('success') }}
                  </div>
            @endif
    
            @if(session('error'))
            <div class="alert alert-danger">
         {{ session('error') }}
              </div>
        @endif
                <table class="table table-bordered">
                    <thead>
                        <tr>
                            <th>First Name</th>
                            <th>Last NAme</th>
                            <th width="200">Email id</th>
                            <th>Phone No</th>
                            <th>Address</th>
                            <th>Zip Code</th>
                            <th>Actions</th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach ($data as $id => $user )
                            
                   
                        <tr>
                            <td>{{ $user->firstName }}</td>
                            <td>{{ $user->lastName }}</td>
                            <td>{{ $user->emailId }}</td>
                            <td>{{ $user->phoneNumber }}</td>
                            <td>{{ $user->streetAddress }}</td>
                            <td>{{ $user->zipCode }}</td>
                            <td>
                                <a class="add" title="Add" data-toggle="tooltip"><i class="material-icons"></i></a>
                                <a class="edit" title="Edit" data-toggle="tooltip" href="{{ route('update', $user->id) }}"><i class="material-icons"></i></a>
                                <a class="delete" title="Delete" data-toggle="tooltip" href="{{ route('delete', $user->id) }}"><i class="material-icons"></i></a>
                            </td>
                        </tr>
                        @endforeach
                    </tbody>
                </table>
                <div class="mt-5">
                {{ $data->links() }}
                </div>
                <div class="mt-5">
                    Total Users: {{ $data->total()}}
                </div>
            </div>
        </div>
    </div>

    Step 10: Add the routes to the routes/web.php

    <?php
    
    use AppHttpControllerscrudController;
    use IlluminateSupportFacadesRoute;
    
    Route::get('/', function () {
        return view('insert');
    });
    Route::controller(crudController::class)->group(function (){
        Route::post('/adduser','addUser')->name('adduser');
        Route::get('/read','showUser')->name('read');
    });

    Step 11: Create the Edit View

    update.blade.php (resources/views/update.blade.php)

    <div class="formbold-form-wrapper">
     
          <form action="{{ route('updateuser', $data->id ) }}" method="post">
            @csrf
            <div class="formbold-form-title">
              <h2 class="">Update User Data</h2>
      
            </div>
            @if(session('success'))
            <div>{{ session('success') }}</div>
        @endif
            <div class="formbold-input-flex">
              <div>
                <label for="firstname" class="formbold-form-label">
                  First name
                </label>
                <input
                  type="text"
                  name="firstname"
                  id="firstname"
                  class="formbold-form-input"
                  value="{{ $data->firstName }}"
                />
              </div>
              <div>
                <label for="lastname" class="formbold-form-label"> Last name </label>
                <input
                  type="text"
                  name="lastname"
                  id="lastname"
                  class="formbold-form-input"
                  value="{{ $data->lastName }}"
                />
              </div>
            </div>
      
            <div class="formbold-input-flex">
              <div>
                <label for="email" class="formbold-form-label"> Email </label>
                <input
                  type="email"
                  name="email"
                  id="email"
                  class="formbold-form-input"
                  value="{{ $data->emailId }}"
                />
              </div>
              <div>
                <label for="phone" class="formbold-form-label"> Phone number </label>
                <input
                  type="text"
                  name="phone"
                  id="phone"
                  class="formbold-form-input"
                  value="{{ $data->phoneNumber }}"
                />
              </div>
            </div>
      
            <div class="formbold-mb-3">
              <label for="address" class="formbold-form-label">
                Street Address
              </label>
              <input
                type="text"
                name="address"
                id="address"
                class="formbold-form-input"
                value="{{ $data->streetAddress }}"
              />
            </div>
      
            <div class="formbold-input-flex">
              <div>
                <label for="post" class="formbold-form-label"> Post/Zip code </label>
                <input
                  type="text"
                  name="post"
                  id="post"
                  class="formbold-form-input"
                  value="{{ $data->zipCode }}"
                />
              </div>
    
            </div>
            <button class="formbold-btn" type="submit">Update</button>
          </form>
        </div>
      </div>

    Step 12: Create the function to fetch/read the particular user’s data in the crudController

    public function updatePage(string $id){
        //$users=DB::table('users')->where('id' , $id)->get();
        $users=DB::table('users')->find($id);
        return view('update',['data' => $users]);
    }

    Step 13: Create the function to update the particular user’s data in the crudController.

    public function updateUser(Request $request, $id){
       // return $request;
        $user=DB::table('users')
        ->where('id', $id)
        ->update([
            'firstName' => $request->firstname,
            'lastName' => $request->lastname,
            'emailId' => $request->email,
            'phoneNumber' => $request->phone,
            'streetAddress' => $request->address,
            'zipCode' => $request->post
    
        ]);
    
        if($user){
            return redirect()->route('read')->with('success', 'Data updated successfully.');
           // echo "<h2>Data Inserted Successfuly</h2>";
    
        } else{
            return redirect()->route('read')->with('error', 'Something went wrong . Please Try again.');
    
        }
    }

    Step 14: Define Routes for update.

    <?php
    use AppHttpControllerscrudController;
    use IlluminateSupportFacadesRoute;
    Route::get('/', function () {
        return view('insert');
    });
    Route::controller(crudController::class)->group(function (){
    
        Route::post('/adduser','addUser')->name('adduser');
        Route::get('/read','showUser')->name('read');
        Route::get('/update/{id}','updatePage')->name('update');
        Route::post('/updateuser/{id}','updateUser')->name('updateuser');
        Route::get('/delete/{id}','deleteUser')->name('delete');
    });

    Step 15: Create the function to delete the particular user’s data in the crudController.

    public function deleteUser(string $id){
        $user=DB::table('users')
        ->where('id', $id)
        ->delete();
        if($user){
            return redirect()->route('read')->with('success', 'Data deleted.');
           // echo "<h2>Data Inserted Successfuly</h2>";
    
        } else{
            echo "<h2>Something went wrong . Please Try again. </h2>";
        }
    }

    Step 16: Define Routes for deletion.

    public function deleteUser(string $id){
        $user=DB::table('users')
        ->where('id', $id)
        ->delete();
        if($user){
            return redirect()->route('read')->with('success', 'Data deleted.');
           // echo "<h2>Data Inserted Successfuly</h2>";
        } else{
            echo "<h2>Something went wrong . Please Try again. </h2>";
        }
    }

    How to run the Script

    1. Download the project zip file

    2. Extract the file and copy crud-app  folder

    3. Paste inside root directory (for xampp xampp/htdocs, for wamp wamp/www, for lamp var/www/Html)

    4. Run these commands

    PS C :> cd xampp/htdocs/crud-app

    PS C:xampphtdocscrud-app> php artisan migrate

    PS C:xampphtdocscrud-app> php artisan serve

    8. After that, open the browser and run the script

    http://127.0.0.1:8000/fetch


    Script Demo

    View Demo
    Laravel 11 CRUD Operation (Source Code)
    Size: 26.6 MB
    Version: V 1.0
    Download Now!

    The post Laravel 11 CRUD Operation appeared first on PHPGurukul.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleFCC clears Surface Laptop 13″, Pro 12″ with Snapdragon, rounded design
    Next Article New Xbox games launching this week, from May 5 through May 11 — Revenge of the Savage Planet hits Xbox Game Pass

    Related Posts

    Development

    GPT-5 is Coming: Revolutionizing Software Testing

    July 22, 2025
    Development

    Win the Accessibility Game: Combining AI with Human Judgment

    July 22, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    LIDROTEC lands $13.5M to tackle semiconductor yield bottlenecks

    News & Updates

    MediaTek Vulnerabilities Let Attackers Escalate Privileges Without User Interaction

    Security

    DuckDB is an in-process SQL OLAP database management system

    Linux

    Convert Eaze

    Web Development

    Highlights

    Artificial Intelligence

    AI for QuickBooks: Automate invoice and AP management

    May 23, 2025

    Artificial intelligence is transforming how 10 million QuickBooks customers manage their finances. Businesses using QuickBooks’…

    CVE-2025-37987 – Linux PDS Core AdminQ Overflow/Stuck Condition Vulnerability

    May 20, 2025

    CVE-2025-49013 – WilderForge GitHub Actions Shell Code Injection Vulnerability

    June 9, 2025

    CVE-2025-45863 – TOTOLINK A3002R Buffer Overflow in formMapDelDevice

    May 13, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.