Hello Devs,
In this tutorial, we are going to learn about laravel 7 crud operation.
Follow this step by step guide given below:
Step 1 :
Install Laravel 7
composer create-project --prefer-dist laravel/laravel blog
Database Configuration
.env
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
Step 2:
Create items Table and Model
php artisan make:model Item -m
/database/migrations/2020_03_05_100722_create_items_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('description');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('items');
}
}
Run this command:
php artisan migrate
app/Item.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
protected $fillable = [
'title','description'
];
}
Step 3 :
Create Route routes/web.php
Route::resource('items','ItemController');
Step 4 :
Create Controller
php artisan make:controller ItemController
app/Http/Controllers/ItemController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Yajra\Datatables\Datatables;
use App\Item;
class ItemController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$items = Item::latest()->paginate(5);
return view('items.index',compact('items'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('items.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'title' => 'required',
'description' => 'required',
]);
Item::create($request->all());
return redirect()->route('items.index')
->with('success','Item created successfully.');
}
/**
* Display the specified resource.
*
* @param \App\Item $Item
* @return \Illuminate\Http\Response
*/
public function show(Item $item)
{
return view('items.show',compact('item'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Item $Item
* @return \Illuminate\Http\Response
*/
public function edit(Item $item)
{
return view('items.edit',compact('item'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Item $Item
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Item $item)
{
$request->validate([
'title' => 'required',
'description' => 'required',
]);
$item->update($request->all());
return redirect()->route('items.index')
->with('success','Item updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Item $Item
* @return \Illuminate\Http\Response
*/
public function destroy(Item $item)
{
$item->delete();
return redirect()->route('items.index')
->with('success','Item deleted successfully');
}
}
Step: 5
Create View resources/views/items/layout.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 7 CRUD Application</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" />
</head>
<body class="bg-dark">
<div class="container">
<div class="row">
<div class="col-md-12">
@yield('content')
</div>
</div>
</div>
</body>
</html>
resources/views/items/index.blade.php
@extends('items.layout')
@section('content')
<div class="card mt-5">
<div class="card-header">
<div class="col-md-12">
<h4 class="card-title"> CRUD Operations in Laravel 7 Example - rathorji.in
<a class="btn btn-success ml-5" href="{{ route('items.create') }}" id="createNewItem"> Create New Item</a>
</h4>
</div>
</div>
<div class="card-body">
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th width="5%">No</th>
<th>Name</th>
<th>Description</th>
<th width="20%">Action</th>
</tr>
@foreach ($items as $item)
<tr>
<td>{{ ++$i }}</td>
<td>{{ $item->title }}</td>
<td>{{ $item->description }}</td>
<td>
<form action="{{ route('items.destroy',$item->id) }}" method="POST">
<a class="btn btn-info btn-sm" href="{{ route('items.show',$item->id) }}">Show</a>
<a class="btn btn-primary btn-sm" href="{{ route('items.edit',$item->id) }}">Edit</a>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm">Delete</button>
</form>
</td>
</tr>
@endforeach
</table>
</div>
@endsection
resources/views/items/create.blade.php
@extends('items.layout')
@section('content')
<div class="card mt-5">
<div class="card-header">
<div class="col-md-12">
<h4 class="card-title"><strong>Create Page</strong> CRUD Operations in Laravel 7 Example - rathorji.in
<a class="btn btn-success ml-5" href="{{ route('items.index') }}">Back</a>
</h4>
</div>
</div>
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('items.store') }}" method="POST">
@csrf
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
<input type="text" name="title" class="form-control" placeholder="Name">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Description:</strong>
<textarea class="form-control" style="height:150px" name="description" placeholder="Description"></textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
@endsection
resources/views/items/edit.blade.php
@extends('items.layout')
@section('content')
<div class="card mt-5">
<div class="card-header">
<div class="col-md-12">
<h4 class="card-title"><strong>Edit Page</strong> CRUD Operations in Laravel 7 Example - rathorji.in
<a class="btn btn-success ml-5" href="{{ route('items.index') }}">Back</a>
</h4>
</div>
</div>
<div class="card-body">
@if ($errors->any())
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('items.update',$item->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
<input type="text" name="title" value="{{ $item->title }}" class="form-control" placeholder="Name">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Description:</strong>
<textarea class="form-control" style="height:150px" name="description" placeholder="Description">{{ $item->description }}</textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
@endsection
resources/views/items/show.blade.php
@extends('items.layout')
@section('content')
<div class="card mt-5">
<div class="card-header">
<div class="col-md-12">
<h4 class="card-title"><strong>Show Page</strong> CRUD Operations in Laravel 7 Example - rathorji.in
<a class="btn btn-success ml-5" href="{{ route('items.index') }}">Back</a>
</h4>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Name:</strong>
{{ $item->title }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Description:</strong>
{{ $item->description }}
</div>
</div>
</div>
</div>
@endsection
Run this command:
php artisan serve
Open this URL:
http://localhost:8000/items
I hope this example helps you.