|
...
|
...
|
@@ -130,47 +130,59 @@ class lyhDemo extends Command |
|
|
|
|
|
|
|
|
|
|
|
public function _actions() {
|
|
|
|
echo '565' . PHP_EOL;
|
|
|
|
echo '开始执行...' . PHP_EOL;
|
|
|
|
ProjectServer::useProject(565);
|
|
|
|
|
|
|
|
$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)));
|
|
|
|
|
|
|
|
// 获取文本类型字段
|
|
|
|
// 获取文本字段
|
|
|
|
$columns = $connection->table('information_schema.columns')
|
|
|
|
->where('table_schema', $dbName)
|
|
|
|
->where('table_name', $table)
|
|
|
|
->whereIn('data_type', ['varchar', 'text', 'mediumtext', 'longtext'])
|
|
|
|
->pluck('column_name')
|
|
|
|
->toArray();
|
|
|
|
// 构建正则表达式,(?i)忽略大小写,匹配品牌名和品牌名加'-'
|
|
|
|
// 用|分隔,注意特殊字符转义
|
|
|
|
$escapedBrands = array_map(function($brand) {
|
|
|
|
return preg_quote($brand, '/');
|
|
|
|
}, $brands);
|
|
|
|
|
|
|
|
// 匹配品牌名,后面可有可无'-',使用单词边界\b保证匹配完整单词
|
|
|
|
$pattern = '(?i)\b(' . implode('|', $escapedBrands) . ')-?\b';
|
|
|
|
|
|
|
|
if (empty($columns)) {
|
|
|
|
echo "未找到文本字段,退出。" . PHP_EOL;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
foreach ($columns as $field) {
|
|
|
|
$sqlField = "`$field`";
|
|
|
|
|
|
|
|
// MySQL 8.0+ 支持 REGEXP_REPLACE,忽略大小写替换
|
|
|
|
$sql = "UPDATE `$table`
|
|
|
|
SET $sqlField = REGEXP_REPLACE($sqlField, '$pattern', '')
|
|
|
|
WHERE $sqlField IS NOT NULL AND $sqlField != ''";
|
|
|
|
|
|
|
|
echo "执行字段:$field" . PHP_EOL;
|
|
|
|
$connection->update($sql);
|
|
|
|
// 构造第一轮REPLACE表达式(原样品牌)
|
|
|
|
$replaceExprRaw = $sqlField;
|
|
|
|
foreach ($brands as $brand) {
|
|
|
|
$safeBrand = addslashes($brand);
|
|
|
|
$replaceExprRaw = "REPLACE(REPLACE($replaceExprRaw, '$safeBrand-', ''), '$safeBrand', '')";
|
|
|
|
}
|
|
|
|
// 构造第二轮REPLACE表达式(小写品牌)
|
|
|
|
$lowerBrands = array_map('strtolower', $brands);
|
|
|
|
$replaceExprLower = $sqlField;
|
|
|
|
foreach ($lowerBrands as $brand) {
|
|
|
|
$safeBrand = addslashes($brand);
|
|
|
|
$replaceExprLower = "REPLACE(REPLACE($replaceExprLower, '$safeBrand-', ''), '$safeBrand', '')";
|
|
|
|
}
|
|
|
|
// 先执行原样品牌替换
|
|
|
|
$sqlRaw = "UPDATE `$table` SET $sqlField = $replaceExprRaw WHERE $sqlField IS NOT NULL AND $sqlField != ''";
|
|
|
|
echo "执行字段(品牌原样替换):$field" . PHP_EOL;
|
|
|
|
try {
|
|
|
|
$connection->update($sqlRaw);
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
echo "字段 $field 原样替换出错:" . $e->getMessage() . PHP_EOL;
|
|
|
|
}
|
|
|
|
// 再执行小写品牌替换
|
|
|
|
$sqlLower = "UPDATE `$table` SET $sqlField = $replaceExprLower WHERE $sqlField IS NOT NULL AND $sqlField != ''";
|
|
|
|
echo "执行字段(品牌小写替换):$field" . PHP_EOL;
|
|
|
|
try {
|
|
|
|
$connection->update($sqlLower);
|
|
|
|
} catch (\Exception $e) {
|
|
|
|
echo "字段 $field 小写替换出错:" . $e->getMessage() . PHP_EOL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
echo '执行结束' . PHP_EOL;
|
|
|
|
|
|
|
|
DB::disconnect('custom_mysql');
|
|
|
|
}
|
|
|
|
} |
...
|
...
|
|