Danendra
Danendra

Reputation: 167

Laravel pagination with search return multiple data

I'm building a table with pagination using laravel tailwind. I can do search but it returns more than one value. this is the image

But in my database, I only have one value of that specific thingthis is the image

here is my index.blade.php

@extends('admin.template')

@section('title', 'Countries List')

@section('content')
    <main class="h-full pb-16 overflow-y-auto py-32">
        <div class="container grid px-6 mx-auto">
            <div class="w-full">
                <form action="admin/countries/search" method="POST" role="search">
                    {{ csrf_field() }}
                    <div class="w-full input-group">
                        <input type="text" class="form-control search rounded-md h-10 dark:text-white dark:bg-gray-800"
                            name="q" placeholder="Search countries" value="{{ $q ? $q : '' }}">
                        <span class="input-group-btn">
                            <button type="submit"
                                class="btn btn-default rounded-md dark:text-white dark:bg-gray-800 px-2 py-2">
                                <i class="fa-solid fa-magnifying-glass"></i></span> search
                        </button>
                        </span>
                    </div>
                </form>
            </div>
            <div class="w-full overflow-hidden rounded-lg shadow-xs mt-10">
                <div class="w-full overflow-x-auto">
                    <table class="table-auto table-bordered dark:text-white dark:bg-gray-800 w-full">
                        <thead>
                            <tr>
                                <th scope="col" class="text-sm font-medium mx-auto text-center px-5 py-4">No</th>
                                <th scope="col" class="text-sm font-medium mx-auto text-center px-5 py-4">Name</th>
                                <th scope="col" class="text-sm font-medium mx-auto text-center px-5 py-4">iso_code</th>
                            </tr>
                        </thead>
                        @foreach ($countries as $key => $value)
                            <tbody class="text-center">
                                <tr class="{{ $key % 2 === 0 ? 'bg-gray-800' : 'bg-gray-900' }} py-5">
                                    <td class="px-6 py-4 whitespace-nowrap text-sm font-medium">{{ ++$key }}</td>
                                    <td class="text-sm font-light px-6 py-4 whitespace-nowra">{{ $value->name }}</td>
                                    <td class="text-sm font-light px-6 py-4 whitespace-nowra">{{ $value->iso_code }}</td>
                                </tr>
                            </tbody>
                        @endforeach
                    </table>
                    <div class="row">
                        <div class="col-md-12">
                            {{ $countries->links('pagination::tailwind') }}
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </main>
@endsection

here is the web route

Route::any('/admin/countries/search', [AdminCountryController::class, 'Search'])->name('admin.countries.search');

and here is the controller part

public function Search()
    {
        $q = RequestFacade::get('q');
        if ($q != "") {
            $countries = Country::where('name', 'LIKE', '%' . $q . '%')->orWhere('iso_code', 'LIKE', '%' . $q . '%')->paginate(5)->setPath('');

            if ($countries->total() > 0) {
                $pagination = $countries->appends(array(
                    'q' => RequestFacade::get('q')
                ));
                return view('admin.pages.countries.index')->with('countries', $countries)->with('q', $q)->with('pagination', $pagination);
            }
        }
        return view('admin.pages.countries.index')->with('q', $q);
    }

I need my website to only show one specific thing but not repeating

Upvotes: 1

Views: 138

Answers (0)

Related Questions