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 關注
- 176 瀏覽
添加回答
舉報