chris48s / cakephp-searchable
A CakePHP 3 Behavior for creating MySQL MATCH() AGAINST() queries
Installs: 5 284
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 7
Forks: 4
Open Issues: 2
Type:cakephp-plugin
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: 2024-12-20 13:06:22 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.