Laravel 8 dynamic dependent dropdown using jQuery ajax tutorial. In this post, you will learn how to implement dynamic dependent dropdown in laravel 8 using jQuery ajax.
Also, i will write easy jQuery ajax code for laravel 8 dynamic dependent dropdown.
In this post, i will create jquery ajax categories and subcategories select dropdown in laravel 8 app. Or show subcategories according to selected category value in dropdown in laravel 8 using ajax.
Laravel 8 Dynamic Dependent Dropdown Using jQuery Ajax
- Step 1 – Installing Laravel 8 Application
- Step 2 – Database Configuration
- Step 3 – Creating Model & Migration
- Step 4 – Make Routes
- Step 5 – Creating Controller
- Step 6 – Create Blade View
- Step 7 – Start Development Server
- Step 8 – Run This App On Browser
Step 1 – Installing Laravel 8 Application
In step 1, open your terminal and navigate to your local web server directory using the following command:
//for windows user cd xampp/htdocs //for ubuntu user cd var/www/html
Then install laravel 8 latest application using the following command:
composer create-project --prefer-dist laravel/laravel Laravel8
Step 2 – Database Configuration
In step 2, open your downloaded laravel 8 app into any text editor. Then find .env file and configure database detail like following:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=db name DB_USERNAME=db user name DB_PASSWORD=db password
Step 3 – Creating Model & Migration
In step 3, open command prompt and navigate to your project by using the following command:
cd / Laravel8
Then create model and migration file by using the following command:
php artisan make:model Category -m
The above command will create two files into your laravel 8 ajax dynamic dropdown tutorial app, which is located inside the following locations:
- Laravel8/app/Models/Category.php
- Laravel8/database/migrations/create_categories_table.php
So, find create_events_table.php file inside Laravel8/database/migrations/ directory. Then open this file and add the following code into function up() on this file:
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->unsignedInteger('parent_id')->nullable();
$table->timestamps();
});
}
Next navigate to app and open Category.php model file. Then update the following code into your app/Category.php file as follow:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $guarded = [];
public function subcategories(){
return $this->hasMany('App\Category', 'parent_id');
}
}
Now, open again your terminal and type the following command on cmd to create tables into your selected database:
php artisan migrate
Step 4 – Create Routes
In step 4, open your web.php file, which is located inside routes directory. Then add the following routes into web.php file:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\FullCalendarController;
Route::get('dynamic-dropdown', [DynamicDropDownController::class, 'index']);
Route::post('fetch', [DynamicDropDownController::class, 'fetch']);
Step 5 – Creating Controller
In step 5, create dynamic dropDown controller by using the following command:
php artisan make:controller DynamicDropDownController
The above command will create DynamicDropDownController.php file, which is located inside Laravel8/app/Http/Controllers/ directory.
So open DynamicDropDownController.php file and add the following code into it:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Category;
use response;
class DynamicDropDownController extends Controller
{
public function index(Request $request)
{
$cat= Category::where('parent_id',0)->get();
return view('category',["categories" => $cat]);
}
public function fetch(Request $request)
{
$parent_id = $request->cat_id;
$subcategories = Category::where('id',$parent_id)
->with('subcategories')
->get();
return response()->json([
'subcategories' => $subcategories
]);
}
}
Step 6 – Create Blade View
In step 6, create new blade view file that named category.blade.php inside resources/views directory. And add the following code into category.blade.php file:
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel 8 jquery ajax categories and subcategories dropdown</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet">
<meta name="csrf-token" content="{{ csrf_token() }}" />
</head>
<body>
<div class="container" style="margin-top: 50px; margin-left: 300px">
<div class="row">
<div class="col-lg-6">
<form action="">
<h4>Category</h4>
<select class="browser-default custom-select" name="category" id="category">
<option selected>Select category</option>
@foreach ($categoris as $item)
<option value="{{ $item->id }}">{{ $item->name }}</option>
@endforeach
</select>
<h4>Subcategory</h4>
<select class="browser-default custom-select" name="subcategory" id="subcategory">
</select>
</form>
</div>
</div>
</div>
</body>
<script type = "text/javascript" >
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(document).ready(function() {
$('#category').on('change', function(e) {
var cat_id = e.target.value;
$.ajax({
url: "{{ route('subcat') }}",
type: "POST",
data: {
cat_id: cat_id
},
success: function(data) {
$('#subcategory').empty();
$.each(data.subcategories[0].subcategories, function(index, subcategory) {
$('#subcategory').append('<option value="' + subcategory.id + '">' + subcategory.name + '</option>');
})
}
})
});
});
</script>
</html>
- The following laravel, jquery ajax code for show subcategories according to select category dropdown:
$(document).ready(function() {
$('#category').on('change', function(e) {
var cat_id = e.target.value;
$.ajax({
url: "{{ route('subcat') }}",
type: "POST",
data: {
cat_id: cat_id
},
success: function(data) {
$('#subcategory').empty();
$.each(data.subcategories[0].subcategories, function(index, subcategory) {
$('#subcategory').append('<option value="' + subcategory.id + '">' + subcategory.name + '</option>');
})
}
})
});
});
Step 7 – Start Development Server
Finally, open your command prompt again and run the following command to start development server for your laravel 8 ajax fullcalendar example:
php artisan serve
Step 8 – Run This App On Browser
In step 8, open your browser and fire the following url into your browser:
http://127.0.0.1:8000/dynamic-dropdown