|
...
|
...
|
@@ -136,29 +136,35 @@ class lyhDemo extends Command |
|
|
|
$table = 'gl_product_keyword';
|
|
|
|
$connection = DB::connection('custom_mysql');
|
|
|
|
|
|
|
|
// 获取当前数据库名,确保正确
|
|
|
|
$dbName = $connection->getDatabaseName();
|
|
|
|
|
|
|
|
$brandsStr = 'Trimos,insize,Fowler,Mahr,Starrett,Tesa,Mitutoyo,Wixey,Shars,Fisso,Spi,Grizzly,Accumaster,Accuremote,Baker,Sharpe,Compac,Earth,Etalon,Federal,Fell,Fisso,Fowler,Gem,Grizzly,Husky,iGaging,Insize,Kanetec,Magnetics,Mighty,Mitutoyo,Noga,Pittsburgh,Procheck,Saker,Scherr Tumico,Shars,Shinwa,SPI,Starrett,Tesa,Technidea,Trimos,Verdict,Wyler,Wixey';
|
|
|
|
$brands = array_unique(array_map('trim', explode(',', $brandsStr)));
|
|
|
|
|
|
|
|
// 获取文本类型字段(varchar, text等)
|
|
|
|
// 获取文本类型字段
|
|
|
|
$columns = $connection->table('information_schema.columns')
|
|
|
|
->where('table_schema', DB::getConfig('custom_mysql.database'))
|
|
|
|
->where('table_schema', $dbName)
|
|
|
|
->where('table_name', $table)
|
|
|
|
->whereIn('data_type', ['varchar', 'text', 'mediumtext', 'longtext'])
|
|
|
|
->pluck('column_name')
|
|
|
|
->toArray();
|
|
|
|
dd($columns);
|
|
|
|
// 构建正则表达式,(?i)忽略大小写,匹配品牌名和品牌名加'-'
|
|
|
|
// 用|分隔,注意特殊字符转义
|
|
|
|
$escapedBrands = array_map(function($brand) {
|
|
|
|
return preg_quote($brand, '/');
|
|
|
|
}, $brands);
|
|
|
|
|
|
|
|
// 匹配品牌名,后面可有可无'-',使用单词边界\b保证匹配完整单词
|
|
|
|
$pattern = '(?i)\b(' . implode('|', $escapedBrands) . ')-?\b';
|
|
|
|
|
|
|
|
foreach ($columns as $field) {
|
|
|
|
$sqlField = "`$field`";
|
|
|
|
$lowerField = "LOWER($sqlField)";
|
|
|
|
$updateExpr = $lowerField;
|
|
|
|
|
|
|
|
foreach ($brands as $brand) {
|
|
|
|
$brandLower = strtolower(addslashes($brand));
|
|
|
|
$updateExpr = "REPLACE(REPLACE($updateExpr, '{$brandLower}-', ''), '{$brandLower}', '')";
|
|
|
|
}
|
|
|
|
// 替换后要保留原字段大小写格式,这里通过 CASE WHEN 判断是否替换,再更新原字段
|
|
|
|
// MySQL 8.0+ 支持 REGEXP_REPLACE,忽略大小写替换
|
|
|
|
$sql = "UPDATE `$table`
|
|
|
|
SET $sqlField = $updateExpr
|
|
|
|
SET $sqlField = REGEXP_REPLACE($sqlField, '$pattern', '')
|
|
|
|
WHERE $sqlField IS NOT NULL AND $sqlField != ''";
|
|
|
|
|
|
|
|
echo "执行字段:$field" . PHP_EOL;
|
...
|
...
|
|