chris48s / cakephp-searchable
为创建MySQL MATCH() AGAINST()查询的CakePHP 3行为
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-09-20 12:27:44 UTC
README
CakePHP Searchable行为插件
为创建MySQL MATCH() AGAINST()查询的CakePHP 3行为。
CakePHP-Searchable为您的CakePHP模型添加了自定义的find('matches')
方法,避免了在查询中传递原始SQL。它对SQL注入有防护,并使用与CakePHP ORM约定一致的查询语法。
安装
使用 packagist 和 composer 安装。将以下内容添加到您的composer.json
文件中
"require": {
"chris48s/cakephp-searchable": "^2.0.0"
}
然后运行composer install
或composer update
,具体取决于您的需求。
数据库支持
为了在InnoDB表上使用FULLTEXT索引,您必须使用MySQL >=5.6.4。早期版本只允许在MyISAM表上使用FULLTEXT索引。
使用方法
加载插件
将代码Plugin::load('Chris48s/Searchable');
添加到您的bootstrap.php
文件中。
使用行为
在您的表类中添加行为。
<?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'); } }
查询数据
添加了行为到表类后,您现在可以访问查询方法find('matches')
,您可以使用它来构建MATCH() AGAINST()查询。例如
<?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' ] ]);
可用模式有
'IN NATURAL LANGUAGE MODE'
'IN BOOLEAN MODE'
'WITH QUERY EXPANSION'
'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION'
在使用布尔模式时,有一些附加运算符可用。
find('matches')
方法返回一个CakePHP查询对象,因此您可以在其上链式调用其他方法(例如:->where()
、->order()
、->limit()
等)。
错误处理
如果未设置键'match'
或'against'
,或者列列表中的任何列的类型不是string
或text
,将抛出类SearchableException
的异常。