正在显示
1 个修改的文件
包含
20 行增加
和
30 行删除
| @@ -129,44 +129,34 @@ class lyhDemo extends Command | @@ -129,44 +129,34 @@ class lyhDemo extends Command | ||
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | 131 | ||
| 132 | - public function _actions(){ | 132 | + public function _actions() { |
| 133 | echo '565' . PHP_EOL; | 133 | echo '565' . PHP_EOL; |
| 134 | ProjectServer::useProject(565); | 134 | ProjectServer::useProject(565); |
| 135 | $table = 'gl_product'; | 135 | $table = 'gl_product'; |
| 136 | $connection = DB::connection('custom_mysql'); | 136 | $connection = DB::connection('custom_mysql'); |
| 137 | - // 要替换的品牌关键词 | 137 | + // 品牌关键词 |
| 138 | $str = '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 | $str = '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'; |
| 139 | - $arr = array_map('trim', explode(',', $str)); // 去空格 | ||
| 140 | - // 获取所有字段名(列名) | 139 | + $brands = array_unique(array_map('trim', explode(',', $str))); |
| 140 | + // 获取所有列名 | ||
| 141 | $columns = $connection->getSchemaBuilder()->getColumnListing($table); | 141 | $columns = $connection->getSchemaBuilder()->getColumnListing($table); |
| 142 | - // 获取所有数据 | ||
| 143 | - $rows = $connection->table($table)->select('*')->get(); | ||
| 144 | - foreach ($rows as $row) { | ||
| 145 | - $updateData = []; | 142 | + |
| 143 | + // 遍历每个字段执行更新 | ||
| 146 | foreach ($columns as $field) { | 144 | foreach ($columns as $field) { |
| 147 | - echo '处理的字段:'.$field.PHP_EOL; | ||
| 148 | - // 只处理文本字段,跳过 id 或 null 字段 | ||
| 149 | - if ($field === 'id' || !is_string($row->$field)) { | ||
| 150 | - continue; | ||
| 151 | - } | ||
| 152 | - $original = $row->$field; | ||
| 153 | - $replaced = $original; | ||
| 154 | - foreach ($arr as $val) { | ||
| 155 | - $replaced = str_ireplace($val . '-', '', $replaced); // 替换 brand- | ||
| 156 | - $replaced = str_ireplace($val, '', $replaced); // 替换 brand | ||
| 157 | - } | ||
| 158 | - if ($replaced !== $original) { | ||
| 159 | - $updateData[$field] = $replaced; | 145 | + if ($field === 'id' || $field === 'image' || $field === 'og_image') continue; // 跳过主键 |
| 146 | + // 构造多重 REPLACE() | ||
| 147 | + $sqlField = "`$field`"; | ||
| 148 | + $updateExpr = $sqlField; | ||
| 149 | + foreach ($brands as $brand) { | ||
| 150 | + $brand = addslashes($brand); // 避免特殊字符 | ||
| 151 | + $updateExpr = "REPLACE($updateExpr, '$brand-', '')"; | ||
| 152 | + $updateExpr = "REPLACE($updateExpr, '$brand', '')"; | ||
| 153 | + } | ||
| 154 | + $sql = "UPDATE `$table` SET $sqlField = $updateExpr WHERE $sqlField IS NOT NULL AND $sqlField != ''"; | ||
| 155 | + echo "执行字段:$field" . PHP_EOL; | ||
| 156 | + $connection->update($sql); | ||
| 160 | } | 157 | } |
| 161 | - } | ||
| 162 | - // 有变更再更新 | ||
| 163 | - if (!empty($updateData)) { | ||
| 164 | - $connection->table($table) | ||
| 165 | - ->where('id', $row->id) | ||
| 166 | - ->update($updateData); | ||
| 167 | - } | ||
| 168 | - } | ||
| 169 | - echo '执行结束'.PHP_EOL; | 158 | + |
| 159 | + echo '执行结束' . PHP_EOL; | ||
| 170 | DB::disconnect('custom_mysql'); | 160 | DB::disconnect('custom_mysql'); |
| 171 | } | 161 | } |
| 172 | } | 162 | } |
-
请 注册 或 登录 后发表评论