In this article, we will see the laravel 9 livewire dependent dropdown. Here, we will learn how to create a dependent dropdown in laravel 7, laravel 8, and laravel 9 using livewire. we will create a dependent dropdown for state and city. So, in this example, we will get data from the database on the change of the laravel 9 livewire dependent dropdown.
So, let's see the dependent dropdown in laravel 9 using livewire, jquery dependent dropdown without ajax, and country state city dependent dropdown in laravel 9.
In this step, we will install laravel 9 using the following command.
composer create-project --prefer-dist laravel/laravel livewire_dependent_dropdown
In this step, we will install laravel livewire using the following composer command.
composer require livewire/livewire
In this step, we need to create a states and cities table with the model.
Migration:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStatesCitiesTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('states', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
Schema::create('cities', function (Blueprint $table) {
$table->id();
$table->integer('state_id');
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('states');
Schema::dropIfExists('cities');
}
}
app/Models/State.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class State extends Model
{
use HasFactory;
protected $fillable = ['name'];
}
app/Models/City.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class City extends Model
{
use HasFactory;
protected $fillable = ['state_id', 'name'];
}
Now, we will create a livewire state city dropdown component for the dependent dropdown.
php artisan make:livewire statecitydropdown
app/Http/Livewire/statecitydropdown.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use App\Models\City;
use App\Models\State;
class Statecitydropdown extends Component
{
public $states;
public $cities;
public $selectedState = NULL;
/**
* Write code on Method
*
* @return response()
*/
public function mount()
{
$this->states = State::all();
$this->cities = collect();
}
/**
* Write code on Method
*
* @return response()
*/
public function render()
{
return view('livewire.statecitydropdown')->extends('layouts.app');
}
/**
* Write code on Method
*
* @return response()
*/
public function updatedSelectedState($state)
{
if (!is_null($state)) {
$this->cities = City::where('state_id', $state)->get();
}
}
}
resources/views/livewire/statecitydropdown.blade.php
<div>
<h1>Laravel 9 Livewire Dependent Dropdown - Websolutionstuff</h1>
<div class="form-group row">
<label for="state" class="col-md-4 col-form-label text-md-right">State</label>
<div class="col-md-6">
<select wire:model="selectedState" class="form-control">
<option value="" selected>Choose state</option>
@foreach($states as $state)
<option value="{{ $state->id }}">{{ $state->name }}</option>
@endforeach
</select>
</div>
</div>
@if (!is_null($selectedState))
<div class="form-group row">
<label for="city" class="col-md-4 col-form-label text-md-right">City</label>
<div class="col-md-6">
<select class="form-control" name="city_id">
<option value="" selected>Choose city</option>
@foreach($cities as $city)
<option value="{{ $city->id }}">{{ $city->name }}</option>
@endforeach
</select>
</div>
</div>
@endif
</div>
In this step, we will add routes to the web.php file.
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Livewire\stateCityDropdown;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('statecitydropdown', stateCityDropdown::class);
In this step, we will create a blade file and include @livewireStyles, and @livewireScripts.
resources/views/layouts/app.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 9 Livewire Dependent Dropdown - Websolutionstuff</title>
@livewireStyles
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
@livewireScripts
</html>
You might also like:
- Read Also: How To Install Vue 3 In Laravel 9 With Vite
- Read Also: How To Create Dependent Dropdown In Laravel
- Read Also: Laravel 9 Phone Number Validation Using Regex
- Read Also: Laravel 9 Two Factor Authentication With SMS