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

Eloquent with JSON Data Columns Tutorial in Laravel 11

Blade Template Tutorial Three Template Inheritance in Laravel 11