John Davidson

php - My live search using livewire is not working

0 comments
Message:


I am doing a live search on livewire, my search term is already binded with the livewire controller, but when I add it to the where clause in render function, it still displays all the data on the table not the one i am searching. I tried replacing the searchterm with a string as keyword in LIKE and it works. It seems that i can't use the input in searchterm as a keyword in the where clause.


here is my controller;


<?php

namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\Item;
use Livewire\WithPagination;

class Items extends Component
{
use WithPagination;
public $searchTerm;

public function render()
{
$select = Item::where('itemName', 'LIKE', '%' . $this->searchTerm . '%')->paginate(6);
return view('livewire.items', ['items' => $select]);
}
}

this is my view


<div class="row browse mt-6">
<div class="col float-left category ">
<h4 class="float-left font-weight-bold">All Categories</h4>
<h4 class="float-left font-weight-bold">Men</h4>
<h4 class="float-left font-weight-bold">Women</h4>
</div>
<div class="col search-cat float-right">
<input type="text" id="search" placeholder="Browse Products" wire:model="searchTerm"/>
</div>
{{$searchTerm}}
</div>
<hr style="border-top: dotted 1px;" />

<div class="row w-100 p-1">
<table class="table-center">
<tbody>
<div>
@foreach($items as $item)
<tr class="mx-auto">
<div class="d-inline w-30 item-desc mx-auto m-1">
<h4 class="pt-1">{{ $item->itemName }}</h4>
<div class="">
<img src="items/{{ $item->itemPic }}.png" alt="" class="item-pic">
</div>
<div class="row">
<div class="col d-inline float-left">
Price: US ${{ $item->itemPrice }}
</div>
<div class="col d-inline float-right">
{{ $item->itemCOD }}</td>
</div>
</div>
</div>

</tr>
</tbody>
@endforeach
</div>

<hr style="border-top: dotted 1px;" />
<div class="pagination-content">
{{ $items->links('pagination::pagination-custom') }}
</div>
<hr style="border-top: dotted 1px;" />

</table>
</div>


My Answer:
php
use Livewire\Component;
use App\Models\User;

class UserSearch extends Component
{
public $searchTerm;

public function render()
{
$users = User::where('name', 'LIKE', '%' . $this->searchTerm . '%')->get();

return view('livewire.user-search', [
'users' => $users
]);
}
}


It seems like the issue might be with how you are binding the search term in the controller. Make sure that the `$searchTerm` property is properly bound in your Livewire component. You can do this by using the `wire:model` directive in your input field in the Livewire component view.

Here is an example of how you can bind the search term in your Livewire component view:

html



Make sure that the input field is properly bound to the `$searchTerm` property in your Livewire component. This should allow you to use the search term in the `where` clause in the controller and filter the results accordingly.

Rate this post

5 of 5 based on 3550 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us