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
