Eloquent ORM Complete CRUD Operation in Laravel 11

 <?php


namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        // $users = User::all();
        $users = User::simplepaginate(4);   //Applying Pagination in Eloquent ORM

        // $users = User::find(2);
        // $users = User::find(2,["name","email"]);
        // $users = User::find([2,4],["name","email"]);
        // $users = User::count();
        // $users = User::min("age");  //min(),max() methods works only with integer data type columns
        // $users = User::max("age");
        // $users = User::sum("age");
        // $users = User::where("city","Delhi")->get();
        // $users = User::where("city","Delhi")->where("age",">",20)->get();   //We can use multiple conditions as this way
        // we can use multiple conditions as shown below :
        // $users = User::where([
        //     ["city","Delhi"],
        //     ["age",">",20]
        // ])->get();
        // $users = User::where("city","Delhi")->orWhere("age",">",20)->get();
        // $users = User::where("city","Delhi")->orWhere("age",">",20)->count();
        // $users = User::whereCity("Delhi")->get();
        // $users = User::whereCity("Delhi")->whereAge(20)->get();
        // $users = User::whereCity("Delhi")->whereAge(20)->select("name","email")->get(); //To fetch particular column data
        // $users = User::whereCity("Delhi")->whereAge(20)->select("name as User Name","email as User Email Address")->get();  //Rename column name

        // $users = User::whereCity("Delhi")->whereAge(20)->select("name as User Name","email as User Email Address")->toSql();    //Check for SQL Query whether there is any error or not in SQL
        // $users = User::whereCity("Delhi")->whereAge(20)->select("name as User Name","email as User Email Address")->toRawSql();
        // $users = User::whereCity("Delhi")->whereAge(20)->select("name as User Name","email as User Email Address")->dd();
        // $users = User::whereCity("Delhi")->whereAge(20)->select("name as User Name","email as User Email Address")->ddRawSql();

        // $users = User::whereCity("Delhi")->first(); //To fetch the first Record from database
        // $users = User::where("age","<>",20)->get();  //we can write this SQL query as shown below :
        // $users = User::whereNot("age",20)->get();

        // $users = User::whereBetween("age",[20,22])->get();  //To get some records in range whose age between 20 to 22
        // $users = User::whereNotBetween("age",[20,22])->get();

        // $users = User::whereIn("city",["Delhi","Goa"])->get();
        // $users = User::whereNotIn("city",["Delhi","Goa"])->get();

        return view("home",compact("users"));
        // return $users;
        // foreach($users as $user) {
        //     echo $user->name . "<br>";
        // }
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view("adduser");
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $request->validate([
            "username" => "required|alpha",
            "useremail" => "required|email",
            "userage" => "required|numeric",
            "usercity" => "required|alpha"
        ]);


        // Method 1 : Insert Data in Database
        // $user = new User;

        // $user->name = $request->username;
        // $user->email = $request->useremail;
        // $user->age = $request->userage;
        // $user->city = $request->usercity;

        // $user->save();

        // Method 2 : Mass Assignment method for inserting data in database
        // Using create() method, we can assign Mass OR Bulk data in database

        // By default, create() method is locked by Laravel framework So we have to unlock create() method then only we can use create() method
        // we can unlock create() method by adding "protected $guarded" OR "protected $fillable" variable in Model Class File
        User::create([
            "name" => $request->username,
            "email" => $request->useremail,
            "age" => $request->userage,
            "city" => $request->usercity
        ]);

        return redirect()->route("user.index")->with("status","User Data Inserted Successfully.");
    }

    /**
     * Display the specified resource.
     */
    public function show(User $user)
    {
        $users = User::find($user->id);
        return view("viewuser",compact("users"));
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(User $user)
    {
        $users = User::find($user->id);
        return view("updateuser",compact("users"));
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, User $user)
    {
        $request->validate([
            "username" => "required|alpha",
            "useremail" => "required|email",
            "userage" => "required|numeric",
            "usercity" => "required|alpha"
        ]);

        // Method 1 : For Update data in database
        // $users = User::find($user->id);

        // $user->name = $request->username;
        // $user->email = $request->useremail;
        // $user->age = $request->userage;
        // $user->city = $request->usercity;

        // $user->save();

        // Method 2 : Mass Update method for update data in database
        $user = User::where("id",$user->id)->update([
            "name" => $request->username,
            "email" => $request->useremail,
            "age" => $request->userage,
            "city" => $request->usercity
        ]);

        return redirect()->route("user.index")->with("status","User Data Updated Successfully.");
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(User $user)
    {
        // Method 1 : For delete record from database
        $user = User::find($user->id);
        $user->delete();

        // User::truncate();//truncate() method will delete all records from database and reset auto-increment id column in database

        // Method 2 : For delete record from database
        // User::destroy($user->id);
        return redirect()->route("user.index")->with("status","User Data Deleted Successfully.");
    }
}
Above File is app\Http\Controllers\UserController.php File





Below File is app\Models\User.php File
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    public $timestamps = false;
    // protected $guarded = [];     //we can write $guarded OR $fillable variable
    protected $fillable = ["name","email","age","city"];
}





Above File is database\migrations\2024_12_06_065530_create_users_table.php File
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string("name");
            $table->string("email");
            $table->integer("age");
            $table->string("city");
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('users');
    }
};





Above File is resources\views\adduser.blade.php File
@extends("layout")

@section("title")
    Add New User
@endsection

@section("content")
<form action="{{ route("user.store") }}" method="POST">
    @csrf
    <div class="mb-3">
        <label for="username" class="form-label">User Name</label>
        <input type="text" class="form-control @error("username") is-invalid @enderror" name="username" placeholder="Enter Username">
        <span class="text-danger">
            @error("username")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <label for="useremail" class="form-label">User Email</label>
        <input type="email" class="form-control @error("useremail") is-invalid @enderror" name="useremail" placeholder="Enter Useremail">
        <span class="text-danger">
            @error("useremail")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <label for="userage" class="form-label">User Age</label>
        <input type="number" class="form-control @error("userage") is-invalid @enderror" name="userage" placeholder="Enter Age">
        <span class="text-danger">
            @error("userage")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <label for="usercity" class="form-label">User City</label>
        <input type="text" class="form-control @error("usercity") is-invalid @enderror" name="usercity" placeholder="Enter City">
        <span class="text-danger">
            @error("usercity")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <input type="submit" value="Save" class="btn btn-success">
    </div>
</form>
@endsection





Above File is resources\views\home.blade.php File
@extends("layout")

@section("title")
    All Users Data
@endsection

@section("content")
<a href="{{ route("user.create") }}" class="btn btn-success btn-sm mb-3">Add New</a>
                <table class="table table-striped table-bordered table mt-2">
                    <tr>
                        <th>ID</th>
                        <th>Name</th>
                        <th>Email</th>
                        <th>Age</th>
                        <th>City</th>
                        <th>View</th>
                        <th>Delete</th>
                        <th>Update</th>
                    </tr>
                    @foreach($users as $data)
                        <tr>
                            <td>{{ $data->id }}</td>
                            <td>{{ $data->name }}</td>
                            <td>{{ $data->email }}</td>
                            <td>{{ $data->age }}</td>
                            <td>{{ $data->city }}</td>
                            <td><a href="{{ route("user.show",$data->id) }}" class="btn btn-primary btn-sm">View</a></td>
                            <td>
                                <form action="{{ route("user.destroy",$data->id) }}" method="POST">
                                    @csrf
                                    @method("DELETE")
                                    <button type="submit" class="btn btn-danger btn-sm">Delete</button>
                                </form>
                            </td>
                            <td><a href="{{ route("user.edit",$data->id) }}" class="btn btn-warning btn-sm">Update</a></td>
                        </tr>
                    @endforeach
                </table>
                <div class="mt-4">
                    {{ $users->links() }}
                </div>
@endsection





Above File is resources\views\layout.blade.php File
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>WelcomeTwo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>
<body>
    <div class="container">
        <div class="row">
            <div class="col-10 bg-info text-center py-2">
                <h3>Eloquent CRUD</h3>
            </div>
        </div>
        <div class="row">
            <div class="col-10 bg-warning-subtle text-center mb-3">
                <h4>@yield("title")</h4>
            </div>
        </div>
        <div class="row">
            <div class="col-10">
                @if(session("status"))
                    <div class="alert alert-success">
                        {{ session("status") }}
                    </div>
                @endif
            </div>
        </div>
        <div class="row">
            <div class="col-10">
                @yield("content")
            </div>
        </div>
    </div>
</body>
</html>





Above File is resources\views\updateuser.blade.php File
@extends("layout")

@section("title")
    Update User Data
@endsection

@section("content")
<form action="{{ route("user.update",$users->id) }}" method="POST">
    @csrf
    @method("PUT")
    <div class="mb-3">
        <label for="username" class="form-label">User Name</label>
        <input type="text" value={{ $users->name }} class="form-control @error("username") is-invalid @enderror" name="username" placeholder="Enter Username">
        <span class="text-danger">
            @error("username")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <label for="useremail" class="form-label">User Email</label>
        <input type="email" value={{ $users->email }} class="form-control @error("useremail") is-invalid @enderror" name="useremail" placeholder="Enter Useremail">
        <span class="text-danger">
            @error("useremail")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <label for="userage" class="form-label">User Age</label>
        <input type="number" value={{ $users->age }} class="form-control @error("userage") is-invalid @enderror" name="userage" placeholder="Enter Age">
        <span class="text-danger">
            @error("userage")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <label for="usercity" class="form-label">User City</label>
        <input type="text" value={{ $users->city }} class="form-control @error("usercity") is-invalid @enderror" name="usercity" placeholder="Enter City">
        <span class="text-danger">
            @error("usercity")
                {{ $message }}
            @enderror
        </span>
    </div>
    <div class="mb-3">
        <input type="submit" value="Save" class="btn btn-success">
    </div>
</form>
@endsection





Above File is resources\views\viewuser.blade.php File
@extends("layout")

@section("title")
    User Detail
@endsection

@section("content")
<table class="table table-striped table-bordered table-hover">
    <tr>
        <th width="80px">Name : </th>
        <td>{{ $users->name }}</td>
    </tr>
    <tr>
        <th>Email : </th>
        <td>{{ $users->email }}</td>
    </tr>
    <tr>
        <th>Age : </th>
        <td>{{ $users->age }}</td>
    </tr>
    <tr>
        <th>City : </th>
        <td>{{ $users->city }}</td>
    </tr>
</table>
<a href="{{ route("user.index") }}" class="btn btn-danger">Back</a>
@endsection





Above File is routes\web.php File
<?php

use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::resource("/user",UserController::class);

















Comments

Popular posts from this blog

Eloquent Many to Many Relationship Tutorial in Laravel 11

Blade Template Tutorial Three Template Inheritance in Laravel 11