作者 lyh

gxAiblog自动发布

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