正在显示
1 个修改的文件
包含
16 行增加
和
10 行删除
| @@ -136,29 +136,35 @@ class lyhDemo extends Command | @@ -136,29 +136,35 @@ class lyhDemo extends Command | ||
| 136 | $table = 'gl_product_keyword'; | 136 | $table = 'gl_product_keyword'; |
| 137 | $connection = DB::connection('custom_mysql'); | 137 | $connection = DB::connection('custom_mysql'); |
| 138 | 138 | ||
| 139 | + // 获取当前数据库名,确保正确 | ||
| 140 | + $dbName = $connection->getDatabaseName(); | ||
| 141 | + | ||
| 139 | $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'; | 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'; |
| 140 | $brands = array_unique(array_map('trim', explode(',', $brandsStr))); | 143 | $brands = array_unique(array_map('trim', explode(',', $brandsStr))); |
| 141 | 144 | ||
| 142 | - // 获取文本类型字段(varchar, text等) | 145 | + // 获取文本类型字段 |
| 143 | $columns = $connection->table('information_schema.columns') | 146 | $columns = $connection->table('information_schema.columns') |
| 144 | - ->where('table_schema', DB::getConfig('custom_mysql.database')) | 147 | + ->where('table_schema', $dbName) |
| 145 | ->where('table_name', $table) | 148 | ->where('table_name', $table) |
| 146 | ->whereIn('data_type', ['varchar', 'text', 'mediumtext', 'longtext']) | 149 | ->whereIn('data_type', ['varchar', 'text', 'mediumtext', 'longtext']) |
| 147 | ->pluck('column_name') | 150 | ->pluck('column_name') |
| 148 | ->toArray(); | 151 | ->toArray(); |
| 149 | dd($columns); | 152 | dd($columns); |
| 153 | + // 构建正则表达式,(?i)忽略大小写,匹配品牌名和品牌名加'-' | ||
| 154 | + // 用|分隔,注意特殊字符转义 | ||
| 155 | + $escapedBrands = array_map(function($brand) { | ||
| 156 | + return preg_quote($brand, '/'); | ||
| 157 | + }, $brands); | ||
| 158 | + | ||
| 159 | + // 匹配品牌名,后面可有可无'-',使用单词边界\b保证匹配完整单词 | ||
| 160 | + $pattern = '(?i)\b(' . implode('|', $escapedBrands) . ')-?\b'; | ||
| 161 | + | ||
| 150 | foreach ($columns as $field) { | 162 | foreach ($columns as $field) { |
| 151 | $sqlField = "`$field`"; | 163 | $sqlField = "`$field`"; |
| 152 | - $lowerField = "LOWER($sqlField)"; | ||
| 153 | - $updateExpr = $lowerField; | ||
| 154 | 164 | ||
| 155 | - foreach ($brands as $brand) { | ||
| 156 | - $brandLower = strtolower(addslashes($brand)); | ||
| 157 | - $updateExpr = "REPLACE(REPLACE($updateExpr, '{$brandLower}-', ''), '{$brandLower}', '')"; | ||
| 158 | - } | ||
| 159 | - // 替换后要保留原字段大小写格式,这里通过 CASE WHEN 判断是否替换,再更新原字段 | 165 | + // MySQL 8.0+ 支持 REGEXP_REPLACE,忽略大小写替换 |
| 160 | $sql = "UPDATE `$table` | 166 | $sql = "UPDATE `$table` |
| 161 | - SET $sqlField = $updateExpr | 167 | + SET $sqlField = REGEXP_REPLACE($sqlField, '$pattern', '') |
| 162 | WHERE $sqlField IS NOT NULL AND $sqlField != ''"; | 168 | WHERE $sqlField IS NOT NULL AND $sqlField != ''"; |
| 163 | 169 | ||
| 164 | echo "执行字段:$field" . PHP_EOL; | 170 | echo "执行字段:$field" . PHP_EOL; |
-
请 注册 或 登录 后发表评论