Download Laravel App
https://laravel.com/docs/11.x/installation
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=laravel11dev
DB_USERNAME=root
DB_PASSWORD=root
Database Migration
C:\xampp\htdocs\laravel\my-app>php artisan migrate
Create Controller
C:\xampp\htdocs\laravel\myapp>php artisan make:controller UserController
app\Http\Controllers\UserController.php
//app\Http\Controllers\UserController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use App\Http\Requests\UserStoreRequest; class UserController extends Controller { public function index() { $users = User::all(); // Return Json Response return response()->json([ 'results' => $users ], 200); } public function store(UserStoreRequest $request) { try { // Create User User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => $request->password ]); // Return Json Response return response()->json([ 'message' => "User successfully created." ], 200); } catch (\Exception $e) { // Return Json Response return response()->json([ 'message' => "Something went really wrong!" ], 500); } } public function show($id) { // User Detail $users = User::find($id); if (!$users) { return response()->json([ 'message' => 'User Not Found.' ], 404); } // Return Json Response return response()->json([ 'users' => $users ], 200); } public function update(UserStoreRequest $request, $id) { try { // Find User $users = User::find($id); if (!$users) { return users()->json([ 'message' => 'User Not Found.' ], 404); } //echo "request : $request->image"; $users->name = $request->name; $users->email = $request->email; // Update User $users->save(); // Return Json Response return response()->json([ 'message' => "User successfully updated." ], 200); } catch (\Exception $e) { // Return Json Response return response()->json([ 'message' => "Something went really wrong!" ], 500); } } public function destroy($id) { // Detail $users = User::find($id); if (!$users) { return response()->json([ 'message' => 'User Not Found.' ], 404); } // Delete User $users->delete(); // Return Json Response return response()->json([ 'message' => "User successfully deleted." ], 200); } }php artisan make:request UserStoreRequest
C:\xampp\htdocs\laravel\myapp>php artisan make:request UserStoreRequest
app\Http\Requests\UserStoreRequest.php
//app\Http\Requests\UserStoreRequest.php <?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class UserStoreRequest extends FormRequest { /** * Determine if the user is authorized to make this request. */ public function authorize(): bool { //return false; return true; } /** * Get the validation rules that apply to the request. * * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string> */ public function rules(): array { if(request()->isMethod('post')) { return [ 'name' => 'required|string|max:258', 'email' => 'required|string', 'password' => 'required|string' ]; } else { return [ 'name' => 'required|string|max:258', 'email' => 'required|string', 'password' => 'required|string' ]; } } public function messages() { if(request()->isMethod('post')) { return [ 'name.required' => 'Name is required!', 'email.required' => 'Email is required!', 'password.required' => 'password is required!' ]; } else { return [ 'name.required' => 'Name is required!', 'email.required' => 'email is required!', 'password.required' => 'password is required!' ]; } } }routes/api.php
//routes/api.php <?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth:sanctum'); Route::get('users', [UserController::class, 'index']); //php artisan install:api Route::get('users/{id}', [UserController::class, 'show']); Route::post('addnew', [UserController::class, 'store']); Route::put('usersupdate/{id}', [UserController::class, 'update']); Route::delete('usersdelete/{id}', [UserController::class, 'destroy']);Run C:\xampp\htdocs\laravel\myapp>php artisan serve
Starting Laravel development server: http://127.0.0.1:8000/api/users
Install nextjs
https://nextjs.org/
npx create-next-app@latest
install axios
npm install axios
https://www.npmjs.com/package/axios
app\page.tsx
app\page.tsx
//app\page.tsx import Link from "next/link"; import TableData from "@/components/tabledata"; import { Suspense } from "react"; import { Spinner } from "@/components/spinner"; export default function Home() { return ( <div className="w-screen py-20 flex justify-center flex-col items-center"> <div className="flex items-center justify-between gap-1 mb-5"> <h1 className="text-4xl font-bold">Next.js 14 Laravel 11 CRUD Mysql (Create Read Update and Delete)| TailwindCSS DaisyUI</h1> </div> <div className="overflow-x-auto"> <div className="mb-2 w-full text-right"> <Link href="/user/create" className="btn btn-primary"> Create </Link> </div> <Suspense fallback={<Spinner />}> <TableData/> </Suspense> </div> </div> ); }components\tabledata.tsx
//components\tabledata.tsx "use client"; import React, { useEffect, useState } from "react"; import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios import Link from "next/link"; export default function Users() { const [userData, setUSerData] = useState([]); useEffect(() => { fetchData(); }, []) const fetchData = async () => { try { const result = await axios("http://127.0.0.1:8000/api/users"); console.log(result.data.results); setUSerData(result.data.results) } catch (err) { console.log("somthing Wrong"); } } const handleDelete=async(id)=>{ console.log(id); await axios.delete("http://127.0.0.1:8000/api/usersdelete/"+id); const newUserData=userData.filter((item)=>{ return( item.id !==id ) }) setUSerData(newUserData); } return ( <table className="table table-zebra"> <thead className="text-sm text-gray-700 uppercase bg-gray-50"> <tr> <th className="py-3 px-6">#</th> <th className="py-3 px-6">Name</th> <th className="py-3 px-6">Email</th> <th className="py-3 px-6">Created At</th> <th className="py-3 px-6 text-center">Actions</th> </tr> </thead> <tbody> {userData.map((rs, index) => ( <tr key={rs.id} className="bg-white border-b"> <td className="py-3 px-6">{index + 1}</td> <td className="py-3 px-6">{rs.name}</td> <td className="py-3 px-6">{rs.email}</td> <td className="py-3 px-6">{rs.created_at}</td> <td className="flex justify-center gap-1 py-3"> <Link href={`/user/view/${rs.id}`} className="btn btn-info"> View </Link> <Link href={`/user/edit/${rs.id}`} className="btn btn-primary"> Edit </Link> <button onClick={()=>handleDelete(rs.id)} className="btn btn-secondary">Delete</button> </td> </tr> ))} </tbody> </table> ); }components\spinner.tsx
//components\spinner.tsx export const Spinner = () => { return ( <span className="loading loading-spinner loading-lg"></span> ); };app\user\create\page.tsx
//app\user\create\page.tsx "use client"; import React, { useState } from "react"; import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios const CreateUserPage = () => { const [userField, setUserField] = useState({ name: "", email: "", password: "" }); const changeUserFieldHandler = (e) => { setUserField({ ...userField, [e.target.name]: e.target.value }); //console.log(userField); } const onSubmitChange = async (e) => { e.preventDefault(); try { const responce= await axios.post("http://127.0.0.1:8000/api/addnew", userField); console.log(responce) window.location.href = '/'; } catch (err) { console.log("Something Wrong"); } } return ( <div className="max-w-md mx-auto mt-5"> <h1 className="text-2xl text-center mb-2">Add New User</h1> <div> <form> <div className="mb-5"> <label htmlFor="name" className="block text-sm font-medium text-gray-900"> Full Name </label> <input type="text" name="name" id="name" className="input input-bordered input-primary w-full max-w-xs" placeholder="Full Name..." onChange={e => changeUserFieldHandler(e)} /> </div> <div className="mb-5"> <label htmlFor="email" className="block text-sm font-medium text-gray-900"> Email </label> <input type="email" name="email" id="email" className="input input-bordered input-primary w-full max-w-xs" placeholder="Email..." onChange={e => changeUserFieldHandler(e)} /> </div> <div className="mb-5"> <label htmlFor="password" className="block text-sm font-medium text-gray-900"> Password </label> <input type="password" name="password" id="password" className="input input-bordered input-primary w-full max-w-xs" placeholder="Password..." onChange={e => changeUserFieldHandler(e)} /> </div> <button type="submit" className="btn btn-primary" onClick={e => onSubmitChange(e)}>Add User</button> </form> </div> </div> ); }; export default CreateUserPage;app\user\edit\[id]\page.tsx
//app\user\edit\[id]\page.tsx "use client"; import React, { useState, useEffect } from 'react'; import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios import Link from "next/link"; import { useParams } from 'next/navigation' export default function ViewUserPage() { const {id}=useParams(); console.log(id); const [userField, setUserField] = useState({ name: "", email: "" }); useEffect(()=>{ fetchUser(); },[id]); const fetchUser=async()=>{ try{ const result=await axios.get("http://127.0.0.1:8000/api/users/"+id); console.log(result.data.users); setUserField(result.data.users) }catch(err){ console.log("Something Wrong"); } } const changeUserFieldHandler = (e) => { setUserField({ ...userField, [e.target.name]: e.target.value }); console.log(userField); } const onSubmitChange = async (e) => { e.preventDefault(); try { await axios.put("http://127.0.0.1:8000/api/usersupdate/"+id, userField); window.location.href = '/'; } catch (err) { console.log("Something Wrong"); } } return ( <div className="max-w-md mx-auto mt-5"> <h1 className="text-2xl text-center mb-2">Edit Form</h1> <form> <div className="mb-3 mt-3"> <label className="block text-sm font-medium text-gray-900"> ID:</label> <input type="text" id="id" name="id" value={id} disabled /> </div> <div className="mb-3 mt-3"> <label className="block text-sm font-medium text-gray-900"> Full Name:</label> <input type="text" className="input input-bordered input-primary w-full max-w-xs" placeholder="Enter Your Full Name" name="name" value={userField.name} onChange={e => changeUserFieldHandler(e)} /> </div> <div className="mb-3 mt-3"> <label className="block text-sm font-medium text-gray-900">Email:</label> <input type="email" className="input input-bordered input-primary w-full max-w-xs" id="email" placeholder="Enter email" name="email" value={userField.email} onChange={e => changeUserFieldHandler(e)}/> </div> <div className="mb-3 mt-3"> <label className="block text-sm font-medium text-gray-900">Password:</label> <input type="text" className="input input-bordered input-primary w-full max-w-xs" id="password" placeholder="Enter Password" name="password" onChange={e => changeUserFieldHandler(e)} required/> </div> <button type="submit" className="btn btn-primary" onClick={e=>onSubmitChange(e)}>Update</button> </form> </div> ); }app\user\view\[id]\page.tsx
//app\user\view\[id]\page.tsx "use client"; import React, { useState, useEffect } from 'react'; import axios from 'axios' //npm install axios https://www.npmjs.com/package/axios import Link from "next/link"; import { useParams } from 'next/navigation' export default function ViewUserPage() { const {id}=useParams(); console.log(id); const[user,setUser]=useState([]); useEffect(()=>{ fetchUser(); },[id]); const fetchUser=async()=>{ try{ const result=await axios.get("http://127.0.0.1:8000/api/users/"+id); console.log(result.data.users); setUser(result.data.users) }catch(err){ console.log("Something Wrong"); } } return ( <div className="max-w-2xl mx-auto mt-5"> <h1 className="text-2xl text-center mb-2">View User</h1> <table className="table table-zebra"> <thead className="text-sm text-gray-700 uppercase bg-gray-50"> <tr> <th>S No.</th> <th>Full Name</th> <th>Email</th> </tr> </thead> <tbody> <tr> <td>{user.id}</td> <td>{user.name}</td> <td>{user.email}</td> </tr> </tbody> </table> </div> ); }run C:\nextjs>npm run dev
Github - Next.js 14 Laravel 11 CRUD Mysql (Create Read Update and Delete)| TailwindCSS DaisyUI