Laravel 10/9 Vue JS Datatables Example

Laravel 10/9 Vue js datatables example; Through this tutorial, i am going to show you how install and use vuejs-datatable package for displaying lists of data in laravel vue js apps.

Laravel 10/9 Vue JS Datatables Example

Use the below given steps to integrate and use vue js dataTable in laravel vue js apps:

  • Step 1: Install Laravel 10/9 App
  • Step 2: Connecting App to Database
  • Step 3: Create Model And Migration
  • Step 4: NPM Configuration
  • Step 5: Add Routes
  • Step 6: Create Controller By Command
  • Step 7: Create Vue Component
  • Step 8: Create Blade Views And Initialize Vue Components
  • Step 9: Run Development Server

Step 1: Install Laravel 10/9 App

Run the following command on command prompt to install laravel app:

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

Step 2: Connecting App to Database

Visit to your project root directory and open .env file. Then set up database credential in .env file as follow:

 DB_CONNECTION=mysql 
 DB_HOST=127.0.0.1 
 DB_PORT=3306 
 DB_DATABASE=here your database name here
 DB_USERNAME=here database username here
 DB_PASSWORD=here database password here

Step 3: Create Model And Migration

Run the following command on command prompt to create model and migration:

php artisan make:model Post -fm

This command will create one model name post.php and also create one migration file for the posts table.

Now open create_posts_table.php migration file from database>migrations and replace up() function with following code:

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

Next, migrate the table using the below command:

php artisan migrate

Visit to app/Models/Post.php and update the following code into your Post.php model as follow:

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
    use HasFactory;
    protected $guarded = [];
}

Next, Navigate to database/factories and open PostFactory.php. Then update the following code into it as follow:

/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Models\Post;
use Faker\Generator as Faker;
$factory->define(Post::class, function (Faker $faker) {
    return [
       'title' => $faker->sentence,
       'slug' => \Str::slug($faker->sentence)
    ];
});

and then execute the following commad on terminal to generate fake data using faker as follow:

php artisan tinker
//and then
factory(\App\Models\Post::class,100)->create()
exit

Step 4: NPM Configuration

Run the following command on command prompt to install Vue dependencies using NPM:

php artisan preset vue

Install all Vue dependencies:

npm install

Install vuejs-datatable:

npm install vuejs-datatable

Step 5: Add Routes

Visit to routes folder and open web.php file and add the following routes into your file:

use App\Http\Controllers\PostController;
Route::get('posts', [PostController::class, 'index']);

Step 6: Create Controller By Command

Run the following command on command prompt to create a controller by an artisan:

php artisan make:controller PostController

Visit to app\Http\Controllers and open PostController.php file. Then update the following code into your PostController.php file:

<?php 
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
    public function index(Request $request)
    {
        $posts = Post::get();
        return response()->json($posts);
        
    }
}

Step 7: Create Vue Component

Visit to resources/assets/js/components folder and create a file called DataTableComponent.vue.

Now, update the following code into your DataTableComponent.vue components file:

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Laravel Vue Datatables Component Example - laratutorials.com</div>
  
                    <div class="card-body">
                        <datatable :columns="columns" :data="rows"></datatable>
                        <datatable-pager v-model="page" type="abbreviated" :per-page="per_page"></datatable-pager>
  
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
  
<script>
  
    import DatatableFactory from 'vuejs-datatable';
  
    export default {
        components: { DatatableFactory },
        mounted() {
            console.log('Component mounted.')
        },
        data(){
            return {
                columns: [
                        {label: 'id', field: 'id'}, 
                        {label: 'Title', field: 'title'},
                        {label: 'Slug', field: 'slug'}
                    ],
                rows: [],
                page: 1,
                per_page: 10,
            }
        },
        methods:{
            getPosts: function() {
                axios.get('/posts').then(function(response){
                    this.rows = response.data;
                }.bind(this));
            }
        },
        created: function(){
            this.getPosts()
        }
    }
</script>

Now open resources/assets/js/app.js and include the DataTableComponent.vue component as follow:

require('./bootstrap');
window.Vue = require('vue');
Vue.component('datatable-component', require('./components/DataTableComponent.vue').default);
const app = new Vue({
    el: '#app',
});

Step 8: Create Blade Views And Initialize Vue Components

Visit to resources/views and create one folder named layouts. Inside this folder create one blade view file named app.blade.php file.

Visit to resources/views/layouts and open app.blade.php file. Then update the following code into your app.blade.php file as follow:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <title>Laravel 10/9 Vue JS DataTable Example Tutorial - laratutorials.com</title>
    <script src="{{ asset('js/app.js') }}" defer></script>
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
    @stack('fontawesome')
</head>
<body>
    <div id="app">
        <main class="py-4">
            @yield('content')
        </main>
    </div>
</body>
</html>
  

Visit to resources/views/ and open welocome.blade.php. Then update the following code into your welcome.blade.php file as follow:

@extends('layouts.app')
@section('content')
<div class="container">
    <div class="row justify-content-center">
        
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">Laravel Vue Js DataTable Example</div>
                    
                <div class="card-body">
                  <datatable-component></datatable-component>
                </div>
                
            </div>
        </div>
    </div>
</div>
@endsection 

Step 9: Run Development Server

Run the following command on command prompt to start development server:

npm run dev
or 
npm run watch

Conclusion

In this tutorial, you have learned how to use vue js dataTable package in laravel vue js apps.

Recommended Laravel Tutorials

Leave a Comment