PHPackages                             codewiser/laravel-scout - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Search &amp; Filtering](/categories/search)
4. /
5. codewiser/laravel-scout

ActiveLibrary[Search &amp; Filtering](/categories/search)

codewiser/laravel-scout
=======================

Laravel Scout helpers

v1.0.9(6mo ago)06321MITPHPPHP ^8.1

Since Apr 18Pushed 6mo agoCompare

[ Source](https://github.com/C0deWiser/laravel-scout)[ Packagist](https://packagist.org/packages/codewiser/laravel-scout)[ RSS](/packages/codewiser-laravel-scout/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (6)Versions (11)Used By (1)

Laravel Scout helpers
=====================

[](#laravel-scout-helpers)

This package allows to easily support and switch between few scout drivers in your application.

The main goal is to manage complex custom searches.

This simple case will work on any scout driver.

```
$users = User::search('query')
    ->where('created_at', '>', now()->subYear())
    ->orderBy('created_at');
```

But if we need more complex search, we should customize search via callback:

```
$users = User::search('query', function () {
        // Customize search here
        // Function arguments differs depending on driver
    })
    ->orderBy('created_at');
```

Different scout drivers has different callback signature, so we can not switch between drivers without punishment. We need to implement custom callback logic for every scout driver we plan to support.

This package provides *invokable* abstract class, that incorporates custom searches for every driver. Implement one or few of `\Codewiser\Scout\Concerns\ScoutsDatabase`, `\Codewiser\Scout\Concerns\ScoutsMeilisearch`, `\Codewiser\Scout\Concerns\ScoutsAlgolia` — depending on what you want your application to support.

```
use Codewiser\Scout\Concerns\Scout;
use Codewiser\Scout\Concerns\ScoutsDatabase;
use Codewiser\Scout\Concerns\ScoutsMeilisearch;
use Codewiser\Scout\Meilisearch\MeilisearchBuilder;
use Illuminate\Contracts\Database\Eloquent\Builder;

class UserScout extends Scout implements ScoutsDatabase, ScoutsMeilisearch
{
    public function __construct(public ?int $min_comments) {
        //
    }

    public function database(Builder $builder) : Builder
    {
        return $builder
            ->has('comments', '>=', $this->min_comments);
    }

    public function meilisearch(MeilisearchBuilder $builder) : MeilisearchBuilder
    {
        return $builder
            ->where('comments_count', '>=', $this->min_comments)
    }
}
```

> As you can see, we provide `MeilisearchBuilder` with familiar interface, that is helpful for building Meilisearch filters.

As this class is *invokable* we may use it as a callback when searching.

```
public function index(\Illuminate\Http\Request $request)
{
    $scouter = new UserScout(min_comments: $request->input('filter.min_comments'));

    $users = User::search('query', $scouter)
        ->orderBy('created_at');

    // Debug search filters
    dump($scouter->debug());

    return $users->paginate();
}
```

Meilisearch config
------------------

[](#meilisearch-config)

Out-of-the-box, we should configure Meiliserach index settings in `config/scout.php`:

```
use App\Models\User;
use App\Models\Flight;

'meilisearch' => [
    'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
    'key' => env('MEILISEARCH_KEY', null),
    'index-settings' => [
        User::class => [
            'filterableAttributes'=> ['id', 'name', 'email'],
            'sortableAttributes' => ['created_at'],
            // Other settings fields...
        ],
        Flight::class => [
            'filterableAttributes'=> ['id', 'destination'],
            'sortableAttributes' => ['updated_at'],
        ],
    ],
],
```

This package allows to configure Meilisearch using php attributes.

```
use Codewiser\Scout\Attributes\MeilisearchFilterableAttributes;
use Codewiser\Scout\Attributes\MeilisearchSortableAttributes;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use Searchable;

    #[MeilisearchFilterableAttributes(['id', 'name', 'email'])]
    #[MeilisearchSortableAttributes(['created_at'])]
    public function toSearchableArray()
    {
        return $this->toArray();
    }
}
```

Then just enumerate searchable classes in `config/scout.php`:

```
use App\Models\User;

'meilisearch' => [
    'host' => env('MEILISEARCH_HOST', 'http://localhost:7700'),
    'key' => env('MEILISEARCH_KEY', null),
    'searchable' => [
        User::class
    ],
],
```

### Console

[](#console)

Use `scout:meilisearch-rebuild` command to rebuild all registered Meilisearch indexes.

###  Health Score

39

—

LowBetter than 86% of packages

Maintenance65

Regular maintenance activity

Popularity15

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~61 days

Recently: every ~128 days

Total

10

Last Release

209d ago

PHP version history (2 changes)v1.0.0PHP ^8.0

v1.0.4PHP ^8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/ce23eaf7ae48d79d2b07efc83ff7cecb2664f428bd531b167b90169423f1453d?d=identicon)[Cellard](/maintainers/Cellard)

---

Top Contributors

[![Cellard](https://avatars.githubusercontent.com/u/1220316?v=4)](https://github.com/Cellard "Cellard (26 commits)")

---

Tags

laravelscout

### Embed Badge

![Health badge](/badges/codewiser-laravel-scout/health.svg)

```
[![Health](https://phpackages.com/badges/codewiser-laravel-scout/health.svg)](https://phpackages.com/packages/codewiser-laravel-scout)
```

###  Alternatives

[jeroen-g/explorer

Next-gen Elasticsearch driver for Laravel Scout.

397612.3k](/packages/jeroen-g-explorer)[zing/laravel-scout-opensearch

Laravel Scout custom engine for OpenSearch

33340.2k](/packages/zing-laravel-scout-opensearch)[romanstruk/manticore-scout-engine

Laravel Manticore Scout Engine

4818.1k](/packages/romanstruk-manticore-scout-engine)[romangrinev/laravel-opensearch-engine

Custom Laravel Scout OpenSearch Engine

1319.8k](/packages/romangrinev-laravel-opensearch-engine)[omure/scout-advanced-meilisearch

Laravel Scout extension that allows to use meilisearch advanced features as well as has an extended collection driver for testing purposes.

123.9k](/packages/omure-scout-advanced-meilisearch)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
