PHPackages                             fynduck/laravel-scout-mysql-driver - 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. fynduck/laravel-scout-mysql-driver

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

fynduck/laravel-scout-mysql-driver
==================================

MySQL driver for Laravel Scout.

3.0(7y ago)07MITPHPPHP &gt;=7.0

Since Oct 10Pushed 7y ago1 watchersCompare

[ Source](https://github.com/fynduck/laravel-scout-mysql-driver)[ Packagist](https://packagist.org/packages/fynduck/laravel-scout-mysql-driver)[ RSS](/packages/fynduck-laravel-scout-mysql-driver/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (2)Dependencies (1)Versions (30)Used By (0)

Laravel Scout MySQL Driver
==========================

[](#laravel-scout-mysql-driver)

Search Eloquent Models using MySQL `FULLTEXT` Indexes or `WHERE LIKE '%:search%`' statements.

1. [Installation](#installation)
2. [Usage](#usage)
3. [Modes](#modes)
4. [Console Command](#console-command)
5. [Configuration](#configuration)

Installation

---------------

[](#installation-)

**Note: Any Models you plan to search using this driver must use a MySQL MyISAM or InnoDB table.**

If you haven't already you should [install Laravel Scout](https://laravel.com/docs/5.6/scout#installation) to your project and apply the `Laravel\Scout\Searchable` trait to any Eloquent models you would like to make searchable.

Install this package via **Composer**

`composer require fynduck/laravel-scout-mysql-driver`

Next add the ServiceProvider to the Package Service Providers in `config/app.php` (laravel &lt; 5.0)

```
        /*
         * Package Service Providers...
         */
        Fynduck\MySQLScout\Providers\MySQLScoutServiceProvider::class,
```

Append the default configuration to `config/scout.php`

```
    'mysql' => [
        'mode' => 'NATURAL_LANGUAGE',
        'model_directories' => [app_path()],
        'min_search_length' => 0,
        'min_fulltext_search_length' => 4,
        'min_fulltext_search_fallback' => 'LIKE',
        'query_expansion' => false
    ]
```

Set `SCOUT_DRIVER=mysql` in your `.env` file

Please note this Laravel Scout driver does not need to update any indexes when a Model is changed as this is handled natively by MySQL. Therefore you can safely disable queuing in `config/scout.php`.

```
    /*
    |--------------------------------------------------------------------------
    | Queue Data Syncing
    |--------------------------------------------------------------------------
    |
    | This option allows you to control if the operations that sync your data
    | with your search engines are queued. When this is set to "true" then
    | all automatic data syncing will get queued for better performance.
    |
    */

    'queue' => false,
```

In addition there is no need to use the `php artisan scout:import` command. However, if you plan to use this driver in either `NATURAL_LANGUAGE` or `BOOLEAN` mode you should first run the provided [console command](#console-command) to create the needed `FULLTEXT` indexes.

Usage

--------

[](#usage-)

Simply call the `search()` method on your `Searchable` models:

`$beers = App\Drink::search('beer')->get();`

Or With pagination:

`$beers = App\Drink::search('beer')->paginate(15);`

Simple constraints can be applied using the `where()` builder method (each additional `WHERE` will be applied using `AND`).

`$beers = App\Drink::search('beer')->where('in_stock', 1)->get();`

The following operators can be applied to the `WHERE` statements: ` != = = >`(`=` will be used if no operator is specified)

`$beers = App\Drink::search('beer')->where('abv >', 10)->get();`

For more usage information see the [Laravel Scout Documentation](https://laravel.com/docs/5.3/scout).

Modes

--------

[](#modes-)

This driver can perform different types of search queries depending on the mode set in the `scout.mysql.mode`Laravel configuration value. Currently 4 different modes are supported `NATURAL_LANGUAGE`,`BOOLEAN`,`LIKE` and `LIKE_EXPANDED`.

### NATURAL\_LANGUAGE and BOOLEAN Modes

[](#natural_language-and-boolean-modes)

In `NATURAL_LANGUAGE` and `BOOLEAN` mode the driver will run MySQL `WHERE MATCH() AGAINST()` queries in the respective modes.

Both modes search queries will include all of Model's `FULLTEXT` compatible fields (`CHAR`,`VARCHAR`,`TEXT`) returned from the Model's `toSearchableArray()` method. It is required to have a `FULLTEXT` index for these fields. You can create this index using the provided [console command](#console-command).

For example running a search on a `POST` model with the following database structure:

column nametypeidint(10) UN AI PKcontentVARCHAR(255)metaTEXTwould produce the following query in `NATURAL_LANGUAGE` mode:

```
select * from `posts` where MATCH(content,meta) AGAINST(? IN NATURAL LANGUAGE MODE)
```

and the following query in `BOOLEAN` mode:

```
select * from `posts` where MATCH(content,meta) AGAINST(? IN BOOLEAN MODE)
```

Operators for `BOOLEAN` mode should be passed as part of the search string.

For more information see the [MySQL's Full-Text Search Functions documentation](http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html).

### LIKE and LIKE\_EXPANDED Modes

[](#like-and-like_expanded-modes)

`LIKE` and `LIKE_EXPANDED` modes will run `WHERE LIKE %?%` queries that will include all of the Model's fields returned from `toSearchableArray()`. `LIKE_EXPANDED` mode will query each field using each individual word in the search string.

For example running a search on a `Customer` model with the following database structure:

column nametypeidint(10) UN AI PKfirst\_nameVARCHAR(255)last\_nameVARCHAR(255)would produce the following query in `LIKE` mode given the search string "John":

```
SELECT * FROM `customers` WHERE (`id` LIKE '%John%' OR `first_name` LIKE '%John%' OR `last_name` LIKE '%JOHN%')
```

and the following query in `LIKE_EXPANDED` mode given the search string "John Smith":

```
SELECT * FROM `customers` WHERE (`id` LIKE '%John%' OR `id` LIKE '%Smith%' OR `first_name` LIKE '%John%' OR `first_name` LIKE '%Smith%' OR `last_name` LIKE '%John%' OR `last_name` LIKE '%Smith%')
```

Console Command

------------------

[](#console-command-)

The command `php artisan scout:mysql-index {model?}` is included to manage the `FULLTEXT` indexes needed for `NATURAL_LANGUAGE`and `BOOLEAN` modes.

If the model parameter is omitted the command will run with all Model's with the `Laravel\Scout\Searchable` trait and a MySQL connection within the directories defined in the `scout.mysql.model_directories` Laravel configuration value.

### Creating Indexes

[](#creating-indexes)

Pass the command a Model to create a `FULLTEXT` index for all of the Model's `FULLTEXT` compatible fields (`CHAR`,`VARCHAR`,`TEXT`) returned from the Model's `toSearchableArray()` method. The index name will be the result of the Model's `searchableAs()` method.

If an index already exists for the Model and the Model contains new searchable fields not in the existing index the index will be dropped and recreated.

`php artisan scout:mysql-index App\\Post`

### Dropping index

[](#dropping-index)

Pass the `-D` or `--drop` options to drop an existing index for a Model.

`php artisan scout:mysql-index App\\Post --drop`

Configuration

----------------

[](#configuration-)

Behavior can be changed by modifying the `scout.mysql` Laravel configuration values.

- `scout.mysql.mode` - The [mode](#mode) used to determine how the driver runs search queries. Acceptable values are `NATURAL_LANGUAGE`,`BOOLEAN`,`LIKE` and `LIKE_EXPANDED`.
- `scout.mysql.model_directories` - If no model parameter is provided to the included `php artisan scout:mysql-index`command the directories defined here will be searched for Model's with the `Laravel\Scout\Searchable` trait and a MySQL connection.
- `scout.mysql.min_search_length` - If the length of a search string is smaller then this value no search queries will run and an empty Collection will be returned.
- `scout.mysql.min_fulltext_search_length` - If using `NATURAL_LANGUAGE` or `BOOLEAN` modes and a search string's length is less than this value the driver will revert to a fallback mode. By default MySQL requires a search string length of at least 4 to to run `FULLTEXT` queries. For information on changing this see the [MySQL's Fine-Tuning MySQL Full-Text Search documentation](http://dev.mysql.com/doc/refman/5.7/en/fulltext-fine-tuning.html).
- `scout.mysql.min_fulltext_search_fallback` - The mode that will be used as a fallback when the search string's length is less than `scout.mysql.min_fulltext_search_length` in `NATURAL_LANGUAGE` or `BOOLEAN` modes. Acceptable values are `LIKE` and `LIKE_EXPANDED`.
- `scout.mysql.query_expansion` - If set to true MySQL query expansion will be used in search queries. Only applies if using `NATURAL_LANGUAGE` mode. For more information see [MySQL's Full-Text Searches with Query Expansion documentation](http://dev.mysql.com/doc/refman/5.7/en/fulltext-query-expansion.html).

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community18

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

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 ~30 days

Recently: every ~23 days

Total

28

Last Release

2674d ago

Major Versions

v1.0.14 → v2.0.02017-07-30

2.2 → 3.02019-01-16

PHP version history (2 changes)v1.0.0PHP &gt;=5.6.4

v2.1.0PHP &gt;=7.0

### Community

Maintainers

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

---

Top Contributors

[![msonowal](https://avatars.githubusercontent.com/u/6334484?v=4)](https://github.com/msonowal "msonowal (19 commits)")[![damiantw](https://avatars.githubusercontent.com/u/19997758?v=4)](https://github.com/damiantw "damiantw (16 commits)")[![hmazter](https://avatars.githubusercontent.com/u/805377?v=4)](https://github.com/hmazter "hmazter (6 commits)")[![antriver](https://avatars.githubusercontent.com/u/251159?v=4)](https://github.com/antriver "antriver (2 commits)")[![boboldehampsink](https://avatars.githubusercontent.com/u/378974?v=4)](https://github.com/boboldehampsink "boboldehampsink (2 commits)")[![djekl](https://avatars.githubusercontent.com/u/1119714?v=4)](https://github.com/djekl "djekl (2 commits)")[![fynduck](https://avatars.githubusercontent.com/u/12099534?v=4)](https://github.com/fynduck "fynduck (2 commits)")[![marky291](https://avatars.githubusercontent.com/u/5384515?v=4)](https://github.com/marky291 "marky291 (2 commits)")[![mlantz](https://avatars.githubusercontent.com/u/1065551?v=4)](https://github.com/mlantz "mlantz (2 commits)")[![sbarbat](https://avatars.githubusercontent.com/u/5275340?v=4)](https://github.com/sbarbat "sbarbat (1 commits)")[![buchin](https://avatars.githubusercontent.com/u/156540?v=4)](https://github.com/buchin "buchin (1 commits)")[![jonathan-bird](https://avatars.githubusercontent.com/u/1510001?v=4)](https://github.com/jonathan-bird "jonathan-bird (1 commits)")[![taylornotwell](https://avatars.githubusercontent.com/u/78162749?v=4)](https://github.com/taylornotwell "taylornotwell (1 commits)")[![mattdfloyd](https://avatars.githubusercontent.com/u/185187?v=4)](https://github.com/mattdfloyd "mattdfloyd (1 commits)")[![tomlankhorst](https://avatars.githubusercontent.com/u/675432?v=4)](https://github.com/tomlankhorst "tomlankhorst (1 commits)")[![blaise-zaga](https://avatars.githubusercontent.com/u/3141704?v=4)](https://github.com/blaise-zaga "blaise-zaga (1 commits)")[![ChrisThompsonTLDR](https://avatars.githubusercontent.com/u/348801?v=4)](https://github.com/ChrisThompsonTLDR "ChrisThompsonTLDR (1 commits)")[![CasperLaiTW](https://avatars.githubusercontent.com/u/5094008?v=4)](https://github.com/CasperLaiTW "CasperLaiTW (1 commits)")[![DariusIII](https://avatars.githubusercontent.com/u/3399658?v=4)](https://github.com/DariusIII "DariusIII (1 commits)")[![OzanKurt](https://avatars.githubusercontent.com/u/8682003?v=4)](https://github.com/OzanKurt "OzanKurt (1 commits)")

### Embed Badge

![Health badge](/badges/fynduck-laravel-scout-mysql-driver/health.svg)

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

###  Alternatives

[doctrine/orm

Object-Relational-Mapper for PHP

10.2k285.3M6.2k](/packages/doctrine-orm)[mongodb/mongodb

MongoDB driver library

1.6k64.0M546](/packages/mongodb-mongodb)[reliese/laravel

Reliese Components for Laravel Framework code generation.

1.7k3.4M16](/packages/reliese-laravel)[stancl/virtualcolumn

Eloquent virtual column.

826.8M13](/packages/stancl-virtualcolumn)[pmatseykanets/laravel-scout-postgres

PostgreSQL Full Text Search Driver for Laravel Scout

164213.7k2](/packages/pmatseykanets-laravel-scout-postgres)[orchestra/database

Database Component for Orchestra Platform

201.4M578](/packages/orchestra-database)

PHPackages © 2026

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