Skip to content

All topics  /  Laravel

Laravel 6 Angularjs Crud Tutorial

Laravel

Teams applying “Laravel 6 Angularjs Crud Tutorial” in a production project can use employee payroll taxes to record implementation, review and debugging time, then compare that effort with tests and shipped functionality instead of treating activity as performance by itself.

Before copying the example into a live application, confirm version-specific behaviour with the official Laravel website and test it against the project’s actual database and runtime.

Nov 22, 2019

hii guys,

In this example,I will show you how to do angularjs crud in laravel 6 application.

we will use angularjs to perform CRUD(Create, Read, Update, Delete) easily in laravel 6 application.

Here we will make simple crud example of item module.if you are fresher in angularjs than you dont need to worry about this because i will present as simple as possible.

Follow below step to perform CRUD using angularjs in your laravel 6 application:

Install Laravel 6


you will create laravel 6 fresh application.

composer create-project --prefer-dist laravel/laravel AngularJsCrud

Create Item Table

In this step we will create migration for item table.

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateItemTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('item', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('quantity');
            $table->string('price');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('item');
    }
}

Create Controller

Run below command in terminal to make item controller :

php artisan make:controller API/ItemController --api

app/controller/API/ItemController.php

Now update ItemController like as below :

<?php

 
namespace App\Http\Controllers\API;

 
use App\Item;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Database\Eloquent\ModelNotFoundException;

 
class ItemController extends Controller
{
    public function index()
    {
        return response()->json([
            'error' => false,
            'items'  => Item::all(),
        ], 200);
    }

 
    public function store(Request $request)
    {
        $validation = Validator::make($request->all(),[ 
            'name' => 'required',
            'quantity' => 'required',
            'price' => 'required',
        ]);

 
        if($validation->fails()){
            return response()->json([
                'error' => true,
                'messages'  => $validation->errors(),
            ], 200);
        }
        else
        {
            $item = new Item;
            $item->name = $request->input('name');
            $item->quantity = $request->input('quantity');
            $item->price = $request->input('price');
            $item->save();

     
            return response()->json([
                'error' => false,
                'item'  => $item,
            ], 200);
        }
    }

 
    public function show($id)
    {
        $item = Item::find($id);

 
        if(is_null($item)){
            return response()->json([
                'error' => true,
                'message'  => "Record with id # $id not found",
            ], 404);
        }

 
        return response()->json([
            'error' => false,
            'item'  => $item,
        ], 200);
    }

 
    public function update(Request $request, $id)
    {
        $validation = Validator::make($request->all(),[ 
            'name' => 'required',
            'quantity' => 'required',
            'price' => 'required',
        ]);

 
        if($validation->fails()){
            return response()->json([
                'error' => true,
                'messages'  => $validation->errors(),
            ], 200);
        }
        else
        {
            $item = Item::find($id);
            $item->name = $request->input('name');
            $item->quantity = $request->input('quantity');
            $item->price = $request->input('price');
            $item->save();

     
            return response()->json([
                'error' => false,
                'item'  => $item,
            ], 200);
        }
    }

 
    public function destroy($id)
    {
        $item = Item::find($id);

 
        if(is_null($item)){
            return response()->json([
                'error' => true,
                'message'  => "Record with id # $id not found",
            ], 404);
        }

 
        $item->delete();

     
        return response()->json([
            'error' => false,
            'message'  => "Item record successfully deleted id # $id",
        ], 200);
    }
}

Create a Model

php artisan make:model Item

app/item.php

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Item extends Model
{
    protected $table = 'item';
    protected $fillable = [
        'name', 'quantity', 'price'
    ];
}

routes/api.php

Route::group(['prefix' => 'api/v1','namespace' => 'API'], function(){
    Route::apiResource('items', 'ItemController');  
});

/public/app/app.js

Create app.js file and put below code :

var app = angular.module('itemRecords', [])
        .constant('API_URL', 'http://localhost:8000/api/v1/');

/public/app/controllers/items.js

Create items.js file and put below code :

app.config(function ($interpolateProvider) {
    $interpolateProvider.startSymbol('[[');
    $interpolateProvider.endSymbol(']]');
});
app.controller('itemsController', function ($scope, $http, API_URL) {

     
    //fetch items listing from 

 
    $http({
        method: 'GET',
        url: API_URL + "items"
    }).then(function (response) {
        $scope.items = response.data.items;
        console.log(response);
    }, function (error) {
        console.log(error);
        alert('This is embarassing. An error has occurred. Please check the log for details');
    });

 
    //show modal form

 
    $scope.toggle = function (modalstate, id) {
        $scope.modalstate = modalstate;
        $scope.item = null;

 
        switch (modalstate) {
            case 'add':
                $scope.form_title = "Add New Item";
                break;
            case 'edit':
                $scope.form_title = "Item Detail";
                $scope.id = id;
                $http.get(API_URL + 'items/' + id)
                    .then(function (response) {
                        console.log(response);
                        $scope.item = response.data.item;
                    });
                break;
            default:
                break;
        }

         
        console.log(id);
        $('#myModal').modal('show');
    }

 
    //save new record and update existing record
    $scope.save = function (modalstate, id) {
        var url = API_URL + "items";
        var method = "POST";

 
        //append item id to the URL if the form is in edit mode
        if (modalstate === 'edit') {
            url += "/" + id;

 
            method = "PUT";
        }

 
        $http({
            method: method,
            url: url,
            data: $.param($scope.item),
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
        }).then(function (response) {
            console.log(response);
            location.reload();
        }), (function (error) {
            console.log(error);
            alert('This is embarassing. An error has occurred. Please check the log for details');
        });
    }

 
    //delete record
    $scope.confirmDelete = function (id) {
        var isConfirmDelete = confirm('Are you sure you want this record?');
        if (isConfirmDelete) {

 
            $http({
                method: 'DELETE',
                url: API_URL + 'items/' + id
            }).then(function (response) {
                console.log(response);
                location.reload();
            }, function (error) {
                console.log(error);
                alert('Unable to delete');
            });
        } else {
            return false;
        }
    }
});

index.blade.php create index.blade.php and put below code :

<!doctype html>
<html lang="en" ng-app="itemRecords">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1,
            shrink-to-fit=no">

 
        <!-- Bootstrap CSS -->
        <link rel="stylesheet"
            href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
            integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
            crossorigin="anonymous">

 
        <title>Laravel 6 Crud application Angular JS Tutorial</title>
    </head>
    <body>
        <div class="container" ng-controller="itemsController">
            <header>
                <h2>items Database</h2>
            </header>
            <div>
                <table class="table">
                    <thead>
                        <tr>
                            <th>ID</th>
                            <th>Name</th>
                            <th>Quantity</th>
                            <th>Price</th>
                            <th><button id="btn-add" class="btn btn-primary
                                    btn-xs"
                                    ng-click="toggle('add', 0)">Add New item</button></th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr ng-repeat="item in items">
                            <td>[[ item.id ]]</td>
                            <td>[[ item.name ]]</td>
                            <td>[[ item.quantity ]]</td>
                            <td>[[ item.price ]]</td>
                            <td>
                                <button class="btn btn-default btn-xs
                                    btn-detail"
                                    ng-click="toggle('edit', item.id)">Edit</button>
                                <button class="btn btn-danger btn-xs btn-delete"
                                    ng-click="confirmDelete(item.id)">Delete</button>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
            <!-- Modal -->
            <div class="modal fade" id="myModal" tabindex="-1"
                role="dialog" aria-labelledby="exampleModalLabel"
                aria-hidden="true">
                <div class="modal-dialog" role="document">
                    <div class="modal-content">
                        <div class="modal-header">
                            <h5 class="modal-title" id="exampleModalLabel">[[ form_title ]]</h5>
                            <button type="button" class="close"
                                data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true">×</span>
                            </button>
                        </div>
                        <div class="modal-body">
                            <form name="frmitems" class="form-horizontal"
                                novalidate="">

 
                                <div class="form-group error">
                                    <label for="inputEmail3" class="col-sm-12
                                        control-label">Name</label>
                                    <div class="col-sm-12">
                                        <input type="text" class="form-control
                                            has-error" id="name" name="name"
                                            placeholder="Name"
                                            value="[[ name ]]"
                                            ng-model="item.name"
                                            ng-required="true">
                                        <span class="help-inline"
                                            ng-show="frmitems.name.$invalid
                                            && frmitems.name.$touched">Name
                                            field is required</span>
                                    </div>
                                </div>

 
                                <div class="form-group">
                                    <label for="inputEmail3" class="col-sm-12
                                        control-label">Quantity</label>
                                    <div class="col-sm-12">
                                        <input type="text" class="form-control"
                                            id="quantity" name="Quantity"
                                            placeholder="quantity"
                                            value="[[ quantity ]]"
                                            ng-model="item.quantity"
                                            ng-required="true">
                                        <span class="help-inline"
                                            ng-show="frmitems.quantity.$invalid
                                            && frmitems.quantity.$touched">Quantity field is required</span>
                                    </div>
                                </div>

 
                                <div class="form-group">
                                    <label for="inputEmail3" class="col-sm-12
                                        control-label">Price</label>
                                    <div class="col-sm-12">
                                        <input type="text" class="form-control"
                                            id="price"
                                            name="price"
                                            placeholder="Price"
                                            value="[[ price ]]"
                                            ng-model="item.price"
                                            ng-required="true">
                                        <span class="help-inline"
                                            ng-show="frmitems.price.$invalid
                                            &&
                                            frmitems.price.$touched">Price field is required</span>
                                    </div>
                                </div>

                                 
                            </form>
                        </div>
                        <div class="modal-footer">
                            <button type="button" class="btn btn-secondary"
                                data-dismiss="modal">Close</button>
                            <button type="button" class="btn btn-primary"
                                id="btn-save" ng-click="save(modalstate, id)"
                                ng-disabled="frmitems.$invalid">Save changes</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>

 
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
            integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
            crossorigin="anonymous"></script>
        <script
            src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
            integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
            crossorigin="anonymous"></script>
        <script
            src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
            integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
            crossorigin="anonymous"></script>

 
        <!-- Load Javascript Libraries (AngularJS, JQuery, Bootstrap) -->
        <script
            src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
        <script
            src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular-animate.min.js"></script>
        <script
            src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular-route.min.js"></script>
        <!-- AngularJS Application Scripts -->
        <script src="<?= asset('app/app.js') ?>"></script>
        <script src="<?= asset('app/controllers/items.js') ?>"></script>
    </body>
</html>

routes/web.php

In web.php file change welcome to index like this :

Route::get('/', function () {
    return view('index');
});

It will help you....