首页 > 解决方案 > Yii2 - 有没有办法在搜索模型中编写基本字符并且结果显示所有带有基本字符和特殊字符的查询?

问题描述

先说一下,本人对 Yii2 比较陌生,多谢理解。

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

例如,在 queryParams 中我写了“bosiljcic”,由于我在 db 中没有“bosiljcic”,所以我在 API 中得到空字符串作为响应。我在 db 中拥有的是“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', 'name', $term]);
        // $query->where(['REGEXP', 'name', '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];
}

标签: phpdatabaseyii2

解决方案


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

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

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


推荐阅读