PHPackages                             chriswillerton/searchable - 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. [Database &amp; ORM](/categories/database)
4. /
5. chriswillerton/searchable

ActiveLibrary[Database &amp; ORM](/categories/database)

chriswillerton/searchable
=========================

Searchable trait for Laravel Eloquent models.

1.0.0(9y ago)37811MITPHPPHP &gt;=5.4.0

Since Jul 11Pushed 9y ago1 watchersCompare

[ Source](https://github.com/ChrisWillerton/Searchable)[ Packagist](https://packagist.org/packages/chriswillerton/searchable)[ RSS](/packages/chriswillerton-searchable/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (1)DependenciesVersions (2)Used By (0)

Searchable
==========

[](#searchable)

Searchable trait for Laravel Eloquent models.

This trait uses a full text search to search individual models. A results collection is provided to help sort multiple model searches by relevance.

Installation
------------

[](#installation)

Add the following to the `composer.json` file in your project:

```
"chriswillerton/searchable": "1.*"

```

or you can run the below on the command line in the root of your project:

```
composer require "chriswillerton/searchable" "1.*"

```

Setup
-----

[](#setup)

To get started, add the trait to the model:

```
use ChrisWillerton\Searchable\Searchable;

class YourModel extends Eloquent
{
	use Searchable;

	protected $full_text_index = 'title, content';

```

You also need to define the full text index that you've setup in your database. Add this as a property on your model called `$full_text_index`.

Usage
-----

[](#usage)

You can use searchable as below:

```
$results = YourModel::search('search term')
	->orderBy('relevance', 'desc')
	->get();

```

The collection is used for collecting multiple model search results together and making it easy to sort the whole collection by relevance. Imagine you have an Article, Post, and Product class, but you want results from all of these mixed together and sorted by relevance. You could do something like the below:

```
// Set which models we wish to search
$models_to_search = [
	Article::class,
	Post::class,
	Product::class
];

$term = 'search term';
$model_results = [];

// Loop through each model and perform the search query
foreach ($models_to_search as $model)
{
	$model_results[] = $model::search($term)
		->get()
		->toArray();
}

// Merge each result set together into a single array of results
$merged_results = array_merge(...$model_results);

// Add these results to a collection...
$collection = new ChrisWillerton\Searchable\SearchableResults($merged_results);

// and order them by relevance
$results = $collection->getByRelevance();

```

You should consider the performance impact of doing the above though. It's probably best to come up with a specific search solution if maximising performance is required.

###  Health Score

29

—

LowBetter than 59% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity58

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

Unknown

Total

1

Last Release

3595d ago

### Community

Maintainers

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

---

Top Contributors

[![ChrisWillerton](https://avatars.githubusercontent.com/u/4704987?v=4)](https://github.com/ChrisWillerton "ChrisWillerton (3 commits)")

---

Tags

searchlaravelmodeleloquentsearchable

### Embed Badge

![Health badge](/badges/chriswillerton-searchable/health.svg)

```
[![Health](https://phpackages.com/badges/chriswillerton-searchable/health.svg)](https://phpackages.com/packages/chriswillerton-searchable)
```

###  Alternatives

[jedrzej/searchable

Searchable trait for Laravel's Eloquent models - filter your models using request parameters

127259.1k5](/packages/jedrzej-searchable)[jedrzej/pimpable

Laravel 4/5/6 package that allows to dynamically filter, sort and eager load relations for your models using request parameters

105179.0k1](/packages/jedrzej-pimpable)

PHPackages © 2026

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