Lompat ke konten Lompat ke sidebar Lompat ke footer

Cara Membuat Search Di Laravel 10 Livewire Dengan Multi Search Field



pada livewire/controller dalam class Siswa extends Component {

taro use ini

use Livewire\WithPagination;

dalam class Siswa extends Component

    use WithPagination;

    protected $paginationTheme = 'bootstrap';
    public $searchTerm;


dalam     public function render() {

jika codingan awal get nya seperti ini 

$siswadata = SiswaModel::orderBy('created_at', 'DESC')->get();

ubah menjadi 

ada tambahan $searchTerm = '%'.$this->searchTerm . '%';  fungsinya untuk multi search field 

      $searchTerm = '%'.$this->searchTerm . '%';

      $siswadata = SiswaModel::where('nama_siswa', 'like', $searchTerm)
      ->orWhere('nis', 'like', $searchTerm)
      ->orWhere('nisn', 'like', $searchTerm)
      ->orderBy('created_at', 'DESC')
      //'guru' fungsinya untuk fokus 1 table biar tidak terjadi eror ketika ada 2 table dalam 1 halaman
      ->paginate(10, ['*'], 'siswa');

fungsi ->orWhere

sebagai multi search field jika ingin mencari dari field yg lainnya

fungsi ->paginate(10, ['*'], 'siswa');

10 artinya menampilkan data 10 halaman

* artinya semua data

siswa fungsinya agar tidak bentrok jika terdapat 2 table dalam 1 halaman


tambahkan method baru dalam livewire

    public function resetSearch()
    {
      $this->reset(['searchTerm']);
    }

fungsi untuk reset text search dengan tombol silang


dalam blade 

untuk tampilan dan fungsi pagination

    <div class="paginateContainer d-flex flex-column flex-md-row justify-content-center justify-content-md-between align-items-center mt-4 mb-2 mx-2" style="font-size: 15px;">
      <span style="margin-top: -0.5em" class="mb-3 mb-md-0">
        Menampilkan {{ $siswadata->firstItem() }} Hingga {{ $siswadata->lastItem() }} Data Dari {{$siswadata->total()}} Total Data
      </span>
      <span class="d-block d-md-none">
        {!! $siswadata->onEachSide(1)->links() !!}
      </span>
      <span class="d-none d-md-block">
        {!! $siswadata->onEachSide(4)->links() !!}
      </span>
    </div>


tampilan search dan fungsi search

    {{-- Searchbar --}}
    <div class="px-3">
      <div class="border border-dark my-3 px-2 py-1 rounded-2 d-flex w-100" style="font-size: 14px;">
        <div class="d-flex align-items-center position-relative w-100">
          <svg height="20px" width="20px" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>

          <input type="text" wire:model.live.debounce.300ms="searchTerm" class="form-control form-control-sm rounded-pill border-0 pe-4" style="box-shadow: none !important;" placeholder="Cari berdasarkan Nama Siswa, NIS Dan NISN">

          @if($this->searchTerm)
          <div style="position: absolute; right: 0; cursor: pointer;">
            <svg height="20px" width="20px" class="text-danger" wire:click.prevent="resetSearch()" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>
          </div>
          @endif
        </div>
      </div>
    </div>
    {{-- End --}}


fungsi code dibawah ini untuk tombol reset search

@if($this->searchTerm)
          <div style="position: absolute; right: 0; cursor: pointer;">
            <svg height="20px" width="20px" class="text-danger" wire:click.prevent="resetSearch()" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path></svg>
          </div>
          @endif