If you are showing data then you have two tables in your dataTable and want to filter column data with different tables in Laravel 10 app. For example, you have 2 tables, 1st is posts and 2nd is users and you create relations in each table. Then you want to display and filter by post title and who writes this post (author name). At that point, you need to use laravel yajra datatables column with relation.
So, in this tutorial, you will learn how to filter and show data in Yajra dataTables column with relationships in Laravel 10 applications.
Laravel 10 Yajra DataTables Search Relationship
By using these steps, you can implement search or filter in laravel apps with datatable relationships:
- Step 1 – Install Laravel 10 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 10 App
First of all, open your terminal and execute the following command to install or download or install Laravel 10 app:
composer create-project --prefer-dist laravel/laravel blog
Step 2 – Connecting App to database
In this step, Configure your database with your apps. So, visit your app root directory and find .env file. Then configure database details as follows:
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, open again your terminal/command line/ command prompt. And execute the following command into it to create model and migration files for your laravel applications:
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 10 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 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 10 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.