Laravel 6.2 Ajax CRUD Tutorial For Beginners
Hi developers, in this guide, I’m going to show how to create CRUD with Ajax & DataTables in Laravel 6. I’ll create CRUD for books table as usual. Here’s the preview of our project:
Let’s follow these steps:
Table of Contents
- Install Laravel and Basic Configurations
- Install Yajra Datatables
- Create Book Model, Migration & Controller
- Register Route
- Create Blade File
Step 1 : Install Laravel and Basic Configurations
Each Laravel project needs this thing. That’s why I have written an article on this topic. Please see this part from here: Install Laravel and Basic Configurations.
Step 2 : Install Yajra Datatables
To display all books in datatable, we’ll use the Yajra Datatables package. Install this package using this:
composer require yajra/laravel-datatables-oracle
Step 3 : Create Book Model, Migration & Controller
In this step, we are going to create the book model, migration and controller. Let’s create these at once:
php artisan make:model Book -mcr
After creating the files, open the migration file from database/migration
s and update the up()
function like this:
public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('author');
$table->timestamps();
});
}
We’ve to migrate the migration:
php artisan migrate
After that open Book model and add a $fillable
array:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
protected $fillable = [
'name', 'author'
];
}
Lastly, open BookController from app\Http\Controllers\API
and paste this code:
<?php
namespace App\Http\Controllers;
use App\Book;
use Illuminate\Http\Request;
use DataTables;
class BookController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
$books = Book::latest()->get();
if ($request->ajax()) {
return Datatables::of($books)
->addIndexColumn()
->addColumn('action', function ($row) {
$btn = 'Edit';
$btn = $btn . ' Delete';
return $btn;
})
->rawColumns(['action'])
->make(true);
}
return view('books', compact('books'));
}
/**
* Store/update resource.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
Book::updateOrCreate([
'id' => $request->book_id
],[
'name' => $request->name,
'author' => $request->author
]);
// return response
$response = [
'success' => true,
'message' => 'Book saved successfully.',
];
return response()->json($response, 200);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Book $books
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$book = Book::find($id);
return response()->json($book);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy(Book $book)
{
$book->delete();
// return response
$response = [
'success' => true,
'message' => 'Book deleted successfully.',
];
return response()->json($response, 200);
}
}
In the BookController file, I’ve written the CRUD functions for the books table.
Step 4 : Register Route
We need to add a resource route for books CRUD.
Route::resource('books','BookController');
Step 5 : Create Blade File
To display data we need to create a view file. Go to resources/views
folder and create a file named “books.blade.php“. Then paste this code:
<!DOCTYPE html>
<html>
<head>
<title>Laravel 6.2 Ajax CRUD with DataTables Tutorial For Beginners - MyNotePaper.com</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"/>
<link href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css" rel="stylesheet">
<link href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css" rel="stylesheet">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/dataTables.bootstrap4.min.js"></script>
</head>
<body>
<div class="container">
<div class="text-center" style="margin: 20px 0px 20px 0px;">
<a href="https://shouts.dev/" target="_blank"><img src="https://i.imgur.com/hHZjfUq.png"></a><br>
<span class="text-secondary">Laravel 6.2 Ajax CRUD with DataTables Tutorial For Beginners</span>
</div>
<div class="container-fluid">
<div class="row">
<h4 class="one">Books</h4>
<button class="btn btn-info ml-auto" id="createNewBook">Create Book</button>
</div>
</div>
<br>
<table id="dataTable" class="table table-striped table-bordered">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Author</th>
<th width="280px">Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
{{-- create/update book modal--}}
<div class="modal fade" id="ajaxModel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="modelHeading"></h4>
</div>
<div class="modal-body">
<form id="bookForm" name="bookForm" class="form-horizontal">
<input type="hidden" name="book_id" id="book_id">
<div class="form-group">
<label for="name" class="col-sm-2 control-label">Name</label>
<div class="col-sm-12">
<input type="text" class="form-control" id="name" name="name" placeholder="Enter name"
value="" maxlength="50" required="" autocomplete="off">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Author</label>
<div class="col-sm-12">
<input type="text" class="form-control" id="author" name="author"
placeholder="Enter author name"
value="" maxlength="50" required="" autocomplete="off">
</div>
</div>
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-primary" id="saveBtn">Save</button>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript">
$(function () {
//ajax setup
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
// datatable
var table = $('#dataTable').DataTable({
processing: true,
serverSide: true,
ajax: "{{ url('books') }}",
columns: [
{data: 'DT_RowIndex', name: 'DT_RowIndex'},
{data: 'name', name: 'name'},
{data: 'author', name: 'author'},
{data: 'action', name: 'action', orderable: false, searchable: false},
]
});
// create new book
$('#createNewBook').click(function () {
$('#saveBtn').html("Create");
$('#book_id').val('');
$('#bookForm').trigger("reset");
$('#modelHeading').html("Create New Book");
$('#ajaxModel').modal('show');
});
// create or update book
$('#saveBtn').click(function (e) {
e.preventDefault();
$(this).html('Saving..');
$.ajax({
data: $('#bookForm').serialize(),
url: "{{ url('books') }}",
type: "POST",
dataType: 'json',
success: function (data) {
$('#bookForm').trigger("reset");
$('#ajaxModel').modal('hide');
table.draw();
$('#saveBtn').html('Save');
},
error: function (data) {
console.log('Error:', data);
$('#saveBtn').html('Save');
}
});
});
// edit book
$('body').on('click', '.editBook', function () {
var book_id = $(this).data('id');
$.get("{{ url('books') }}" + '/' + book_id + '/edit', function (data) {
$('#modelHeading').html("Edit Book");
$('#saveBtn').html('Update');
$('#ajaxModel').modal('show');
$('#book_id').val(data.id);
$('#name').val(data.name);
$('#author').val(data.author);
})
});
// delete book
$('body').on('click', '.deleteBook', function () {
var book_id = $(this).data("id");
var delete_confirm = confirm("Are You sure want to delete !");
if(delete_confirm) {
$.ajax({
type: "DELETE",
url: "{{ url('books') }}" + '/' + book_id,
success: function (data) {
table.draw();
},
error: function (data) {
console.log('Error:', data);
}
});
}
});
});
</script>
</html>
Our application is ready to run. Let’s run our project:
php artisan serve
Now go to the URL and test the CRUD:
http://localhost:8000/books
The tutorial is over. You can download this project from GitHub. Thank you. ?Md Obydullah
Software Engineer | Ethical Hacker & Cybersecurity...
Md Obydullah is a software engineer and full stack developer specialist at Laravel, Django, Vue.js, Node.js, Android, Linux Server, and Ethichal Hacking.