PHP code example of nahid-ferdous / laravel-searchable

1. Go to this page and download the library: Download nahid-ferdous/laravel-searchable library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

nahid-ferdous / laravel-searchable example snippets




namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use NahidFerdous\Searchable\Searchable;

class User extends Authenticatable
{
    use Searchable;
    
    // Define your relationships as usual
    public function country()
    {
        return $this->belongsTo(Country::class);
    }
    
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

$searchQuery = request('search_query');

$users = User::search($searchQuery, ['%name', '%email', 'phone'])->get();

User::where('name', 'like', '%' . $searchQuery . '%')
    ->orWhere('email', 'like', '%' . $searchQuery . '%')
    ->orWhere('phone', $searchQuery)
    ->get();

$searchQuery = request('search_query'); // e.g., 'bangladesh'

$users = User::search($searchQuery, [
    '%name',
    '%email',
    '%phone',
    'country|%name',              // Search in related country's name
    'country.city|%name'          // Search in nested relationship
])->get();

User::where('name', 'like', '%' . $searchQuery . '%')
    ->orWhere('email', 'like', '%' . $searchQuery . '%')
    ->orWhere('phone', 'like', '%' . $searchQuery . '%')
    ->orWhereHas('country', function ($query) use ($searchQuery) {
        $query->where('name', 'like', '%' . $searchQuery . '%');
    })
    ->orWhereHas('country.city', function ($query) use ($searchQuery) {
        $query->where('name', 'like', '%' . $searchQuery . '%');
    })
    ->get();

$searchQuery = request('search_query');

$users = User::search($searchQuery, [
    '%first_name',
    '%last_name',
    '%first_name+last_name',      // Search full name
])->get();

User::where('first_name', 'like', '%' . $searchQuery . '%')
    ->orWhere('last_name', 'like', '%' . $searchQuery . '%')
    ->orWhere(DB::raw("concat(first_name, ' ', last_name)"), 'LIKE', '%' . $searchQuery . '%')
    ->get();

$searchQuery = request('search_query');
$status = request('status');

$users = User::search($searchQuery, [
        '%first_name',
        '%last_name',
        '%first_name+last_name',
    ])
    ->search($status, ['status'])      // Add additional condition
    ->get();

User::where('first_name', 'like', '%' . $searchQuery . '%')
    ->orWhere('last_name', 'like', '%' . $searchQuery . '%')
    ->orWhere(DB::raw("concat(first_name, ' ', last_name)"), 'LIKE', '%' . $searchQuery . '%')
    ->where('status', $status)
    ->get();

$status = request('status');
$date = request('date'); // e.g., '2020-01-01'

$users = User::search($status, ['status'])
    ->searchDate($date, ['created_at'], '>')
    ->get();

User::where('status', $status)
    ->whereDate('created_at', '>', $date)
    ->get();

$status = request('status');
$dateRange = request('date_range'); // e.g., '2020-01-01 - 2020-01-31'

$users = User::search($status, ['status'])
    ->searchDate($dateRange, ['created_at'], '><')
    ->get();

$startDate = explode(' - ', $dateRange)[0];
$endDate = explode(' - ', $dateRange)[1];
$start = Carbon::parse($startDate);
$end = Carbon::parse($endDate);

User::where('status', $status)
    ->whereBetween('created_at', [$start, $end])
    ->get();

public function index(Request $request)
{
    $users = User::query()
        // Text search across multiple fields
        ->search($request->search_query, [
            '%first_name',
            '%last_name',
            '%first_name+last_name',
            '%email',
            'country|%name',
        ])
        // Filter by status
        ->search($request->status, ['status'])
        // Filter by role
        ->search($request->role, ['role'])
        // Date range filter
        ->searchDate($request->date_range, ['created_at'], '><')
        // Pagination
        ->paginate(20);
    
    return view('users.index', compact('users'));
}

$users = User::search($searchQuery, ['%name'])
    ->where('verified', true)
    ->orderBy('created_at', 'desc')
    ->with('country')
    ->paginate(15);
bash
php artisan vendor:publish --provider="NahidFerdous\Searchable\SearchableServiceProvider"

http://example.com/users?search_query=john&status=1&role=admin&date_range=2020-01-01 - 2020-01-31