从Magento 1 Aheadworks Blog迁移至Magento 2 Amasty Blog Pro的文章迁移问询
我见过不少Magento开发者折腾过这类跨扩展的博客迁移,确实能通过数据库脚本搞定——不过得先摸清楚两个扩展的表结构差异,下面给你梳理双向的SQL逻辑和关键注意点:
一、从Magento 1 Aheadworks Blog导出核心数据
Aheadworks Blog的核心数据主要存在几个表中,你可以用以下SQL导出需要的内容(如果是跨服务器迁移,可将结果导出为CSV;同服务器的话可以直接跨库关联):
1. 导出文章主数据
-- 导出已发布的博客文章主内容(可根据需求去掉WHERE条件导出所有) SELECT post_id AS old_post_id, title, identifier AS url_key, content AS post_content, meta_keywords, meta_description, created_time AS created_at, update_time AS updated_at, status, author, featured AS is_featured FROM aw_blog WHERE status = 1;
2. 导出文章与店铺的关联关系
-- 记录文章属于哪些店铺(如果你的Magento是多店铺模式) SELECT post_id, store_id FROM aw_blog_store;
3. 导出分类及文章-分类关联(可选)
如果需要迁移博客分类:
-- 导出博客分类 SELECT cat_id AS old_cat_id, title AS name, identifier AS url_key, description, status, position FROM aw_blog_category; -- 导出文章和分类的关联关系 SELECT post_id, cat_id FROM aw_blog_post_category;
二、导入到Magento 2 Amasty Blog Pro
Amasty Blog Pro的表结构和Aheadworks有不少差异,导入前建议先在测试环境核对字段定义,以下是核心导入逻辑:
1. 导入文章主数据
-- 注意:需确保字段匹配,若Amasty有额外必填字段,要补充默认值 INSERT INTO amasty_blog_post ( title, url_key, post_content, meta_keywords, meta_description, created_at, updated_at, is_active, author_name, featured, sort_order ) SELECT title, url_key, post_content, meta_keywords, meta_description, created_at, updated_at, status, author, is_featured, 0 -- 默认排序值,可按需调整 FROM ( -- 这里替换成你的导出数据,或者直接关联Magento1的数据库 SELECT * FROM magento1_db.aw_blog WHERE status = 1 ) AS imported_posts;
2. 导入店铺关联关系
如果是多店铺,注意Magento1和Magento2的store_id可能不一致,需要提前做好映射:
-- 先创建临时表存储旧文章ID和新文章ID的映射 CREATE TEMPORARY TABLE post_id_map ( old_post_id INT, new_post_id INT ); INSERT INTO post_id_map SELECT old.old_post_id, new.post_id FROM (SELECT old_post_id, url_key FROM 你的导出表) AS old JOIN amasty_blog_post AS new ON old.url_key = new.url_key; -- 导入店铺关联 INSERT INTO amasty_blog_post_store ( post_id, store_id ) SELECT map.new_post_id, rel.store_id FROM post_id_map AS map JOIN magento1_db.aw_blog_store AS rel ON map.old_post_id = rel.post_id;
3. 导入分类及关联(可选)
同样需要先建立旧分类ID和新分类ID的映射:
-- 导入分类 INSERT INTO amasty_blog_category ( name, url_key, description, is_active, position, meta_title, meta_keywords, meta_description ) SELECT name, url_key, description, status, position, name, -- 用分类名填充meta_title,可根据实际调整 meta_keywords, meta_description FROM magento1_db.aw_blog_category WHERE status = 1; -- 创建分类ID映射临时表 CREATE TEMPORARY TABLE cat_id_map ( old_cat_id INT, new_cat_id INT ); INSERT INTO cat_id_map SELECT old.old_cat_id, new.category_id FROM (SELECT old_cat_id, url_key FROM 你的分类导出表) AS old JOIN amasty_blog_category AS new ON old.url_key = new.url_key; -- 导入文章-分类关联 INSERT INTO amasty_blog_post_category ( post_id, category_id ) SELECT post_map.new_post_id, cat_map.new_cat_id FROM magento1_db.aw_blog_post_category AS rel JOIN post_id_map AS post_map ON rel.post_id = post_map.old_post_id JOIN cat_id_map AS cat_map ON rel.cat_id = cat_map.old_cat_id;
关键注意事项
- 媒体文件迁移:SQL只处理数据库数据,文章里的图片需要手动从Magento1的
media/aw_blog复制到Magento2的media/amasty/blog,还要批量替换文章内容里的路径:UPDATE amasty_blog_post SET post_content = REPLACE(post_content, '/media/aw_blog/', '/media/amasty/blog/'); - 用户作者映射:如果Aheadworks的
author是Magento1的用户,需要把Magento1的用户ID对应到Magento2的用户ID,然后更新amasty_blog_post的author_id字段,而不是只存author_name。 - 测试优先:一定要在测试环境先跑脚本,验证文章、分类、关联是否正常显示,有没有乱码或数据缺失。
内容的提问来源于stack exchange,提问作者dsmr
相关产品推荐
相关产品推荐

