正在显示
1 个修改的文件
包含
36 行增加
和
24 行删除
| @@ -130,47 +130,59 @@ class lyhDemo extends Command | @@ -130,47 +130,59 @@ class lyhDemo extends Command | ||
| 130 | 130 | ||
| 131 | 131 | ||
| 132 | public function _actions() { | 132 | public function _actions() { |
| 133 | - echo '565' . PHP_EOL; | 133 | + echo '开始执行...' . PHP_EOL; |
| 134 | ProjectServer::useProject(565); | 134 | ProjectServer::useProject(565); |
| 135 | - | ||
| 136 | $table = 'gl_product_keyword'; | 135 | $table = 'gl_product_keyword'; |
| 137 | $connection = DB::connection('custom_mysql'); | 136 | $connection = DB::connection('custom_mysql'); |
| 138 | - | ||
| 139 | - // 获取当前数据库名,确保正确 | ||
| 140 | $dbName = $connection->getDatabaseName(); | 137 | $dbName = $connection->getDatabaseName(); |
| 141 | - | ||
| 142 | $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'; | 138 | $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'; |
| 143 | $brands = array_unique(array_map('trim', explode(',', $brandsStr))); | 139 | $brands = array_unique(array_map('trim', explode(',', $brandsStr))); |
| 144 | - | ||
| 145 | - // 获取文本类型字段 | 140 | + // 获取文本字段 |
| 146 | $columns = $connection->table('information_schema.columns') | 141 | $columns = $connection->table('information_schema.columns') |
| 147 | ->where('table_schema', $dbName) | 142 | ->where('table_schema', $dbName) |
| 148 | ->where('table_name', $table) | 143 | ->where('table_name', $table) |
| 149 | ->whereIn('data_type', ['varchar', 'text', 'mediumtext', 'longtext']) | 144 | ->whereIn('data_type', ['varchar', 'text', 'mediumtext', 'longtext']) |
| 150 | ->pluck('column_name') | 145 | ->pluck('column_name') |
| 151 | ->toArray(); | 146 | ->toArray(); |
| 152 | - // 构建正则表达式,(?i)忽略大小写,匹配品牌名和品牌名加'-' | ||
| 153 | - // 用|分隔,注意特殊字符转义 | ||
| 154 | - $escapedBrands = array_map(function($brand) { | ||
| 155 | - return preg_quote($brand, '/'); | ||
| 156 | - }, $brands); | ||
| 157 | - | ||
| 158 | - // 匹配品牌名,后面可有可无'-',使用单词边界\b保证匹配完整单词 | ||
| 159 | - $pattern = '(?i)\b(' . implode('|', $escapedBrands) . ')-?\b'; | ||
| 160 | - | 147 | + if (empty($columns)) { |
| 148 | + echo "未找到文本字段,退出。" . PHP_EOL; | ||
| 149 | + return; | ||
| 150 | + } | ||
| 161 | foreach ($columns as $field) { | 151 | foreach ($columns as $field) { |
| 162 | $sqlField = "`$field`"; | 152 | $sqlField = "`$field`"; |
| 163 | - | ||
| 164 | - // MySQL 8.0+ 支持 REGEXP_REPLACE,忽略大小写替换 | ||
| 165 | - $sql = "UPDATE `$table` | ||
| 166 | - SET $sqlField = REGEXP_REPLACE($sqlField, '$pattern', '') | ||
| 167 | - WHERE $sqlField IS NOT NULL AND $sqlField != ''"; | ||
| 168 | - | ||
| 169 | - echo "执行字段:$field" . PHP_EOL; | ||
| 170 | - $connection->update($sql); | 153 | + // 构造第一轮REPLACE表达式(原样品牌) |
| 154 | + $replaceExprRaw = $sqlField; | ||
| 155 | + foreach ($brands as $brand) { | ||
| 156 | + $safeBrand = addslashes($brand); | ||
| 157 | + $replaceExprRaw = "REPLACE(REPLACE($replaceExprRaw, '$safeBrand-', ''), '$safeBrand', '')"; | ||
| 158 | + } | ||
| 159 | + // 构造第二轮REPLACE表达式(小写品牌) | ||
| 160 | + $lowerBrands = array_map('strtolower', $brands); | ||
| 161 | + $replaceExprLower = $sqlField; | ||
| 162 | + foreach ($lowerBrands as $brand) { | ||
| 163 | + $safeBrand = addslashes($brand); | ||
| 164 | + $replaceExprLower = "REPLACE(REPLACE($replaceExprLower, '$safeBrand-', ''), '$safeBrand', '')"; | ||
| 165 | + } | ||
| 166 | + // 先执行原样品牌替换 | ||
| 167 | + $sqlRaw = "UPDATE `$table` SET $sqlField = $replaceExprRaw WHERE $sqlField IS NOT NULL AND $sqlField != ''"; | ||
| 168 | + echo "执行字段(品牌原样替换):$field" . PHP_EOL; | ||
| 169 | + try { | ||
| 170 | + $connection->update($sqlRaw); | ||
| 171 | + } catch (\Exception $e) { | ||
| 172 | + echo "字段 $field 原样替换出错:" . $e->getMessage() . PHP_EOL; | ||
| 173 | + } | ||
| 174 | + // 再执行小写品牌替换 | ||
| 175 | + $sqlLower = "UPDATE `$table` SET $sqlField = $replaceExprLower WHERE $sqlField IS NOT NULL AND $sqlField != ''"; | ||
| 176 | + echo "执行字段(品牌小写替换):$field" . PHP_EOL; | ||
| 177 | + try { | ||
| 178 | + $connection->update($sqlLower); | ||
| 179 | + } catch (\Exception $e) { | ||
| 180 | + echo "字段 $field 小写替换出错:" . $e->getMessage() . PHP_EOL; | ||
| 181 | + } | ||
| 171 | } | 182 | } |
| 172 | 183 | ||
| 173 | echo '执行结束' . PHP_EOL; | 184 | echo '执行结束' . PHP_EOL; |
| 185 | + | ||
| 174 | DB::disconnect('custom_mysql'); | 186 | DB::disconnect('custom_mysql'); |
| 175 | } | 187 | } |
| 176 | } | 188 | } |
-
请 注册 或 登录 后发表评论