Laravel 9 dataTables with relationship search; Through this tutorial, we will learn how to search or filter and display column in yajra dataTables with relationships in laravel 9 apps.
Sometimes, we have more than two tables joined and want filter or search column data with separate table in laravel 9 app. So this tutorial will guide step by step how to add relationship search or filter in laravel 9 apps using dataTable js.
Laravel 9 DataTables with Relationship Search/Filter Example
Use the following steps to implement relationship search or filter in laravel 9 apps using dataTable js:
- Step 1 – Install Laravel 9 App
- Step 2 – Connecting App to Database
- Step 3 – Install Yajra DataTable
- Step 4 – Create Migration and Modal
- Step 5 – Add route
- Step 6 – Create Controller by Artisan Command
- Step 7 – Create Blade File
- Step 8 – Run Development Server
Step 1 – Install Laravel 9 App
First of all, open your terminal and execute the following command to install or download or install laravel 9 app:
composer create-project --prefer-dist laravel/laravel blog
Step 2 – Connecting App to database
After that, open “.env” file and update the database name, username and password in the env file:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=Enter_Your_Database_Name DB_USERNAME=Enter_Your_Database_Username DB_PASSWORD=Enter_Your_Database_Password
Step 3 – Install Yajra DataTable
In this step, execute the following command on terminal to install yajra datatable via composer package, so open your terminal and execute the following command:
composer require yajra/laravel-datatables-oracle
After that, you need to set providers and alias.
config/app.php
..... 'providers' => [ .... Yajra\DataTables\DataTablesServiceProvider::class, ] 'aliases' => [ .... 'DataTables' => Yajra\DataTables\Facades\DataTables::class, ] .....
Step 4 – Create Migration and Modal
In this step, execute the following command on the terminal to create post table migration and create Post Modal:
php artisan make:modal Post -m
database/migrations/2020_05_20_070104_create_posts_table.php
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->integer('user_id'); $table->string('title'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } }
Now run the following command
php artisan migrate
After you have to update following code in your Post model file to create a posts table.
Next open Post.php model, which is placed inside App/models directory and create relationship in this model:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use App\Models\User; class Post extends Model { use HasFactory; protected $fillable = ['title']; public function users() { return $this->belongsTo(User::class,'user_id','id'); } }
Step 5 – Add route
Next, open your “routes/web.php” file and add the following route:
use App\Http\Controllers\PostController; Route::get('posts', [PostController::class, 'index'])->name('posts.index');
Step 6 – Create Controller by Artisan Command
In this step, open your terminal execute the following command to create PostController.php file:
php artisan make:controller PostController
This command will create PostController by the artisan command.
Next, go to app/http/controller/PostController.php. and update the following methods into your controller file:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; use App\Models\Post; use DataTables; class PostController extends Controller { /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index(Request $request) { if ($request->ajax()) { $model = Post::with('users'); return DataTables::eloquent($model) ->addColumn('users', function (Post $post) { return $post->users->name; }) ->toJson(); } return view('users'); } }
Step 7 – Create Blade File
In this step, Visit resources/views directory and create new file users.blade.php.
After that, update the following html and javascript code into your blade view file:
<!DOCTYPE html> <html> <head> <title>Laravel 9 Datatables with Relationship Tutorial - Tutsmake.com</title> <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.16/css/jquery.dataTables.min.css" rel="stylesheet"> <link href="https://cdn.datatables.net/1.10.19/css/dataTables.bootstrap4.min.css" rel="stylesheet"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.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> <style type="text/css"> .paginate_button{ padding: 0px !important; } </style> </head> <body> <div class="container" style="margin-top: 100px;margin-bottom: 100px; "> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header bg-info text-white">Laravel 9 Datatables with Relationship Tutorial - Tutsmake.com</div> <div class="card-body"> @if (session('status')) <div class="alert alert-success" role="alert"> {{ session('status') }} </div> @endif <table class="table table-bordered data-table"> <thead> <tr> <th>No</th> <th>Title</th> <th>Auther</th> </tr> </thead> <tbody> </tbody> </table> </div> </div> </div> </div> </div> <script type="text/javascript"> $(document).ready(function() { $('.data-table').DataTable({ processing: true, serverSide: true, ajax: "{{ route('posts.index') }}", columns: [ {data: 'id', name: 'id'}, {data: 'title', name: 'title'}, {data: 'users', name: 'users.name'}, ] }); }); </script> </body> </html>
Step 8 – Run Development Server
In this step, Execute the php artisan serve command on terminal to start server locally:
php artisan serve
Then open your browser and hit the following url on it:
http://127.0.0.1:8000/posts
Conclusion
Laravel 9 datatables with reletionship example, you have learned how to use relationship on dataTables and as well as how to datatables filter column on a relationship.