Autocomplete widget in the jQuery UI library displays an items list that matches with the search value in the textbox.
You can either predefine its data or load it dynamically.
In this tutorial, I show how you can add jQuery UI autocomplete in the Livewire component in your Laravel 9 project.

Contents
- Add Database configuration
- Create a Table
- Create Model
- Create Controller
- Create Route
- Create Livewire Component
- Create View
- Output
- Conclusion
1. Add Database configuration
Open .env file to update the database connection.
Specify the host, database name, username, and password.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=tutorial DB_USERNAME=root DB_PASSWORD=
2. Create a Table
- Create a table
employeesusing migration.
php artisan make:migration create_employees_table
- Now, navigate to
database/migrations/folder from the project root. - Find a PHP file that ends with
create_employees_tableand open it. - Define the table structure in the
up()method.
public function up()
{
Schema::create('employees', function (Blueprint $table) {
$table->id();
$table->string('emp_name',60);
$table->string('email',80);
$table->string('city',100);
$table->smallInteger('status');
$table->timestamps();
});
}
- Run the migration –
php artisan migrate
- The table is been created and I added some records to it.
3. Create Model
- Create
EmployeesModel –
php artisan make:model Employees
- Open
app/Models/Employees.phpfile. - Specify mass assignable Model attributes – emp_name, email, city, and status using the
$fillableproperty.
Completed Code
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Employees extends Model
{
use HasFactory;
protected $fillable = [
'emp_name','email','city','status'
];
}
4. Create Controller
- Create
PagesControllercontroller.
php artisan make:controller PagesController
- Open
app\Http\Controllers\PagesController.phpfile. - Create 1 method –
- index() – Load
indexview.
- index() – Load
Completed Code
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PagesController extends Controller
{
public function index(){
return view('index');
}
}
5. Create Route
- Open
routes/web.phpfile. - Define 1 route –
- / – Load index view.
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PagesController;
Route::get('/', [PagesController::class, 'index']);
6. Create Livewire Component
- Create
jqueryui-autocompletecomponent –
php artisan make:livewire jqueryui-autocomplete
This will create 2 files –
- app/Http/Livewire/JqueryuiAutocomplete.php
- resources/views/livewire/jqueryui-autocomplete.blade.php
app/Http/Livewire/JqueryuiAutocomplete.php
- Include
App\Models\Employeesmodel. - Create 2 property variables –
- $searchEmployee – Store selected employee name from the suggestion list.
- $selEmployeeId – Store selected employee id from the suggestion list.
- Create 1 method –
- getData() – This method calls when a search value typed in the autocomplete element. If
$searchis empty then fetch 5 records from theemployeestable otherwise, fetch 5 records from theemployeestable where$searchis matched in theemp_namefield.
- getData() – This method calls when a search value typed in the autocomplete element. If
Loop on the fetched records. Initialize $response Array with value and label keys. Pass employee id in value key and name in label key.
Return $response Array in JSON format.
Completed Code
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use App\Models\Employees;
class JqueryuiAutocomplete extends Component
{
public $searchEmployee = "";
public $selEmployeeId = 0;
// Fetch autocomplete Data
public function getData($search = ""){
if($search == ''){
$employees = Employees::orderby('emp_name','asc')->select('id','emp_name')->limit(5)->get();
}else{
$employees = Employees::orderby('emp_name','asc')->select('id','emp_name')->where('emp_name', 'like', '%' .$search . '%')->limit(5)->get();
}
$response = array();
foreach($employees as $employee){
$response[] = array(
"value"=>$employee->id,
"label"=>$employee->emp_name
);
}
return response()->json($response);
}
public function render()
{
return view('livewire.jqueryui-autocomplete');
}
}
resources/views/livewire/jqueryui-autocomplete.blade.php
- Create 2 textboxes –
- First textbox is use to initialize jQuery UI autocomplete. Add
autocompleteclass andwire:model="searchEmployee". - Second textbox is use to display the selected item id. Here, also add model –
selEmployeeId.
- First textbox is use to initialize jQuery UI autocomplete. Add
Script –
- Initialize Autocomplete on
autocompleteclass. - Here, add 2 options –
- source – Call component
getData()method using@this.getData(). In the method pass the search value.
- source – Call component
It will return JSON data with Promise. For reading it use then. JSON.parse the data and pass it in response().
-
- select – Using this option read selected item
valueandlabel. With@this.setupdate model values. Storeui.item.labelinsearchEmployeeandui.item.valueinselEmployeeId.
- select – Using this option read selected item
Completed Code
<div>
<input type="text" class='autocomplete' wire:model="searchEmployee"> <br><br>
<br>
<input type="text" wire:model="selEmployeeId">
</div>
@section('scripts')
<!-- Script -->
<script >
$(document).ready(function(){
$( ".autocomplete" ).autocomplete({
source: function( request, response ) {
var responseData = @this.getData(request.term);
responseData.then((data) => {
var data = JSON.parse(data);
response( data );
});
},
select: function (event, ui) {
@this.set('searchEmployee', ui.item.label);
@this.set('selEmployeeId', ui.item.value);
return false;
}
});
});
</script>
@endsection
7. Create View
Create index.blade.php file in resources/views/ folder.
Include jQuery and jQuery UI library –
<!-- jQuery UI CSS --> <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css"> <!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- jQuery UI JS --> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
Include jqueryui-autocomplete component, livewire style, and script. Also, add @yield('scripts').
Completed Code
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>How to Add jQuery UI autocomplete in Livewire - Laravel</title>
<!-- jQuery UI CSS -->
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<!-- jQuery -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<!-- jQuery UI JS -->
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
@livewireStyles
</head>
<body>
<livewire:jqueryui-autocomplete />
@livewireScripts
@yield('scripts')
</body>
</html>
8. Output
9. Conclusion
Returning JSON Array response must have data with value and label keys otherwise, data will not load in autocomplete element.
You can also view this tutorial if you want to implement autocomplete without any library in Livewire.
If you found this tutorial helpful then don't forget to share.