Yii2-是否可以在搜索模型中编写基本字符,并且结果显示所有具有基本字符和特殊字符的查询?

问题描述

首先要说的是,我在Yii2中相对较新,所以感谢您的理解。

我正在使用MariaDB数据库引擎。

例如,在queryParams中,我写了'bosiljcic',由于我在db中没有'bosiljcic',因此我在API中得到了空字符串作为响应。 我在数据库中拥有的是“Bosiljčić”。我如何编写查询以列出所有被记录下来的关闭查询。像“ bosiljcic”和“bosiljčić”一样?

到目前为止,我的代码

    public function actionSearch()
{
    // get search params
    $term = Yii::$app->getRequest()->getQueryParam('term');

    $page = Yii::$app->getRequest()->getQueryParam('page') ?: 1;
    $pageSize = Yii::$app->getRequest()->getQueryParam('page-size') ?: 20;

    // query
    if ($term == null || strlen($term) < 3) {
        $authors = [];
    } else {
        $query = AuthorSummary::find();
        // $query->where(['like','name',$term]);
        // $query->where(['RLIKE',$term]);
        // $query->where(['REGEXP','PHP|MysqL']);
        $query->andWhere(['published' => Author::STATUS_PUBLISHED]);
        $query->orderBy('name');
        // pagination
        $query->limit($pageSize);
        $query->offset(($page - 1) * $pageSize);

        $authors = $query->all();
    }

    return ['authors' => $authors];
}

解决方法

不是解决方案,而是解决方法。在表中存储仅包含基本字符的单独名称字段。您可以通过以下方式获得它: iconv('utf-8','ascii//TRANSLIT',$text);

对搜索短语执行相同的操作。 搜索原始字段中的原始短语和音译字段中的音译短语。

您也可以尝试使用SOUNDEX或SOUNDS LIKE函数,但那些仅适用于英文字母AFAIK。