php - 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];
}
解决方案
不是解决方案,而是解决方法。将仅包含基本字符的单独名称字段存储在您的表格中。您可以通过以下方式获得它:
iconv('utf-8', 'ascii//TRANSLIT', $text);
对您的搜索词组执行相同操作。搜索原始字段中的原始短语和音译字段中的音译短语。
您也可以尝试使用 SOUNDEX 或 SOUNDS LIKE 功能,但这些功能仅适用于英文字母 AFAIK。
推荐阅读
- python-3.x - 引用数据透视表数据帧中的多列位置
- google-apps-script - 谷歌应用脚本“TypeError:data.getCell 不是函数”,找不到我错的地方
- ios - 无法在 Swift 4 中使用 Firestore 的 arrayContainsAny 运算符搜索数组字段
- c++ - 非 DSA 工作时 OpenGL DSA 代码不工作
- flutter - 错误:必须初始化不可为空的实例字段“结果”
- regex - 如何创建一个拒绝双斜杠但如果中间有单词则接受字符串的正则表达式?
- python - 把“我”换成“你”?
- directx - 对缓冲区资源使用无绑定描述符是否有意义?
- java - 如何从 websocket 端点访问反应式 Panache 实体会话管理器?(夸库斯,叛变,华丽,反应)
- python-3.x - 解析页面时出错 - Python