chris48s/cakephp-searchable

为创建MySQL MATCH() AGAINST()查询的CakePHP 3行为

3.0.0 2022-04-20 07:01 UTC

This package is auto-updated.

Last update: 2024-09-20 12:27:44 UTC


README

Build Status Coverage Status

CakePHP Searchable行为插件

为创建MySQL MATCH() AGAINST()查询的CakePHP 3行为。

CakePHP-Searchable为您的CakePHP模型添加了自定义的find('matches')方法,避免了在查询中传递原始SQL。它对SQL注入有防护,并使用与CakePHP ORM约定一致的查询语法。

安装

使用 packagistcomposer 安装。将以下内容添加到您的composer.json文件中

"require": {
    "chris48s/cakephp-searchable": "^2.0.0"
}

然后运行composer installcomposer 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',或者列列表中的任何列的类型不是stringtext,将抛出类SearchableException的异常。

报告问题

如果您对此插件有任何问题,请随时在GitHub仓库上创建一个新问题。此插件采用MIT许可证。