chris48s / cakephp-searchable
A CakePHP 3 Behavior for creating MySQL MATCH() AGAINST() queries
Installs: 5 307
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 5
Forks: 4
Open Issues: 2
Type:cakephp-plugin
pkg:composer/chris48s/cakephp-searchable
Requires
- php: >=5.6
- cakephp/cakephp: 4.*
Requires (Dev)
- cakephp/cakephp-codesniffer: dev-master
- php-coveralls/php-coveralls: ^2.0.0
- phpunit/phpunit: 8.*
This package is auto-updated.
Last update: 2025-10-20 15:11:21 UTC
README
CakePHP Searchable Behavior Plugin
A CakePHP 3 Behavior for creating MySQL MATCH() AGAINST() queries.
CakePHP-Searchable adds a custom find('matches') method to your CakePHP models, alleviating the need to pass raw SQL into your queries. It is safe against SQL injection and uses a query syntax which is consistent with the conventions of CakePHP's ORM.
Installation
Install from packagist using composer.
Add the following to your composer.json:
"require": {
"chris48s/cakephp-searchable": "^2.0.0"
}
and run composer install or composer update, as applicable.
Database Support
In order to use FULLTEXT indexes on InnoDB tables, you must be using MySQL >=5.6.4. Earlier versions only allow use of FULLTEXT indexes on MyISAM tables.
Usage
Loading the plugin
Add the code Plugin::load('Chris48s/Searchable'); to your bootstrap.php.
Using the Behavior
Add the behavior in your table class.
<?php namespace App\Model\Table; use Cake\ORM\Table; class MyTable extends Table { public function initialize(array $config) { parent::initialize($config); $this->addBehavior('Chris48s/Searchable.Searchable'); } }
Querying data
Having added the behavior to a table class, you now have access to the query method find('matches'), which you can use to construct MATCH() AGAINST() queries. For example:
<?php use Cake\ORM\TableRegistry; $myTable = TableRegistry::get('MyTable'); $query = $myTable ->find('matches', [ [ 'match' => 'textcol1', 'against' => 'foo' ], [ 'match' => 'textcol2, textcol3', 'against' => '+foo bar*', 'mode' => 'IN BOOLEAN MODE' ] ]);
Available modes are:
'IN NATURAL LANGUAGE MODE''IN BOOLEAN MODE''WITH QUERY EXPANSION''IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION'
When using boolean mode, some additional operators are available.
The method find('matches') returns a CakePHP query object, so you can chain
additional methods on to this (e.g: ->where(), ->order(), ->limit(), etc).
Error Handling
If the keys 'match' or 'against' are not set, or if any of the columns contained in the column list are not of type string or text, an exception of class SearchableException will be thrown.
Reporting Issues
If you have any issues with this plugin then please feel free to create a new Issue on the GitHub repository. This plugin is licensed under the MIT Licence.