亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數據庫中搜索而不考慮 MySql 和 Laravel 中的 HTML 標簽

在數據庫中搜索而不考慮 MySql 和 Laravel 中的 HTML 標簽

PHP
慕斯王 2023-04-02 10:32:42
我在數據庫中有一條記錄I am <b>"Asking"</b> a question在名為 log_message 的列中使用LogTable::where('log_message','like','%I am "Asking" a ques%')有什么辦法可以實現嗎?
查看完整描述

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);

? ? });

}


查看完整回答
反對 回復 2023-04-02
?
烙印99

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)');


查看完整回答
反對 回復 2023-04-02
  • 2 回答
  • 0 關注
  • 176 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號