Download Laravel App
composer create-project --prefer-dist laravel/laravel my-app
C:\xampp\htdocs\laravel10project>composer create-project laravel/laravel laravel10project
Connecting our Database
open .env file root directory.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laraveldb
DB_USERNAME=root
DB_PASSWORD=
Create Model and Migration
C:\xampp\htdocs\laravel\laravelproject>php artisan make:model Post -m
A new file named Post.php will be created in the app directory and database/migrations directory to generate the table in our database
app/Models/Post.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | //app/Models/Post.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Post extends Model { use HasFactory; protected $fillable = [ 'title' , 'body' , 'slug' ]; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | //database\migrations\create_posts_table.php <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up(): void { Schema::create( 'posts' , function (Blueprint $table ) { $table ->id(); $table ->string( 'title' ); $table ->string( 'slug' ); $table ->text( 'body' ); $table ->timestamps(); }); } public function down(): void { Schema::dropIfExists( 'posts' ); } }; |
php artisan migrate
C:\xampp\htdocs\laravel\laravel10project>php artisan migrate
Migration table created successfully.
check database table
Create Factory Class
php artisan make:factory PostFactory --model=Post
C:\xampp\htdocs\laravel\laravel10project>php artisan make:factory PostFactory --model=Post
database\factories\PostFactory.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | //database\factories\PostFactory.php <?php namespace Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; use App\Models\Post; use Illuminate\Support\Str; /** * @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Post> */ class PostFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = Post:: class ; /** * Define the model's default state. * * @return array */ public function definition() { return [ 'title' => $this ->faker->text(), 'slug' => Str::slug( $this ->faker->text()), 'body' => $this ->faker->paragraph() ]; } } |
php artisan tinker
C:\xampp\htdocs\laravel\laravel10project>php artisan tinker
App\Models\Post::factory()->count(50)->create();
Create Controller
C:\xampp\htdocs\laravel\laravel10project>php artisan make:controller PostController
app\Http\Controllers\PostController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | // <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Post; use Yajra\DataTables\Facades\Datatables; class PostController extends Controller { public function index(Request $request ) { if ( $request ->ajax()) { $data = Post::select( '*' ); return Datatables::of( $data ) ->addIndexColumn() ->addColumn( 'action' , function ( $row ){ $actionBtn = '<a href="javascript:void(0)" class="edit btn btn-success btn-sm">Edit</a> <a href="javascript:void(0)" class="delete btn btn-danger btn-sm">Delete</a>' ; return $actionBtn ; }) ->rawColumns([ 'action' ]) ->make(true); } return view( 'post' ); } } |
Bootstrap 5
https://getbootstrap.com/docs/5.0/getting-started/introduction/
https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css
jQuery DataTables API for Laravel
https://github.com/yajra/laravel-datatables
resources/views/posts.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | //resources/views/posts.blade.php <!DOCTYPE html> <html> <head> <title>Laravel 10 Implementing Yajra Datatables</title> <link href= "https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel= "stylesheet" > </head> <body> <div class = "container" > <h2>Laravel 10 Implementing Yajra Datatables </h2> <table class = "table table-bordered data-table" > <thead> <tr> <th>No</th> <th>Title</th> <th>Content</th> <th width= "105px" >Action</th> </tr> </thead> <tbody> </tbody> </table> </div> <script type= "text/javascript" > $( function () { var table = $( '.data-table' ).DataTable({ processing: true, serverSide: true, ajax: "{{ route('posts.index') }}" , columns: [ {data: 'id' , name: 'id' }, {data: 'title' , name: 'title' }, {data: 'body' , name: 'body' }, {data: 'action' , name: 'action' , orderable: false, searchable: false}, ] }); }); </script> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 | //routes/web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\PostController; Route::get( '/' , function () { return view( 'welcome' ); }); Route::get( 'posts' ,[PostController:: class , 'index' ])->name( 'posts.index' ); |
Starting Laravel development server: http://127.0.0.1:8000/posts