作者 lyh

gxAiblog自动发布

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