2 回答
TA贡献1811条经验 获得超6个赞
log_message
最简单但在性能方面相当昂贵的方法是使用 MySQLsREGEXP_REPLACE
函数预先删除列中的 HTML :
LogTable::whereRaw('regexp_replace(log_message, "<[^>]*>", "") like ?', '%I am "Asking" a ques%')
或者,如果您使用的是 MySQL 5.7+,则可以使用上面原始 where 查询中使用的相同 RegEx 将生成的列添加到表中:
alter table
logs_table
add column
log_message_clean text as
(
regexp_replace(log_message, '<[^>]*>', '')
);
或者如果您想手动设置列的内容(例如在您的代码中更好地控制删除的内容,例如使用strip_tags 或 Purifier),只需添加一个新列并让您的模式在每次自动更新此列更改基列的log_message更改位置:
protected static function boot(): void
{
self::creating(function (LogTable $model) {
$model->log_message_clean = strip_tags($model->log_message);
});
}
TA贡献1829条经验 获得超13个赞
如果您使用的是 InnoDB 或 MyISAM 表,则可以执行全文搜索。
$search = "like','%I am \"Asking\" a ques%";
LogTable::whereRaw('match(log_message) against(?)', [$search])->get();
然后您需要添加全文索引。
DB:statement('alter table log_table add fulltext fulltext_index(log_message)');
- 2 回答
- 0 关注
- 139 浏览
添加回答
举报