问题描述
首先要说的是,我在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。