# Magento Category Migration Tool This Laravel application provides a web-based interface to migrate categories from Magento 1 to Magento 2 with multi-store support. ## Features - ✅ Multi-store category migration - ✅ Web-based user interface - ✅ Real-time migration progress - ✅ Database connection testing - ✅ Category preview before migration - ✅ Detailed migration logs ## Setup ### 1. Database Configuration Add the following environment variables to your `.env` file: ```env # Magento 1 Database MAGENTO1_DB_HOST=127.0.0.1 MAGENTO1_DB_PORT=3306 MAGENTO1_DB_DATABASE=magento1 MAGENTO1_DB_USERNAME=root MAGENTO1_DB_PASSWORD=your_password MAGENTO1_DB_PREFIX= # Magento 2 Database MAGENTO2_DB_HOST=127.0.0.1 MAGENTO2_DB_PORT=3306 MAGENTO2_DB_DATABASE=magento2 MAGENTO2_DB_USERNAME=root MAGENTO2_DB_PASSWORD=your_password MAGENTO2_DB_PREFIX= ``` ### 2. Access the Migration Interface Once your Laravel application is running, navigate to: ``` http://your-domain/migration ``` Or if using DDEV: ``` https://migrate.ddev.site/migration ``` ## Usage ### 1. Test Database Connections Click the "Test Connections" button to verify that both Magento 1 and Magento 2 databases are accessible. ### 2. Map Stores For each Magento 1 store, select the corresponding Magento 2 store from the dropdown menu. This mapping determines which store view the category attributes will be migrated to. ### 3. Preview Categories (Optional) Click "Preview Categories" to see a list of categories that will be migrated from Magento 1. ### 4. Start Migration Click "Start Migration" to begin the migration process. The tool will: - Migrate category structure (parent-child relationships) - Migrate category attributes (name, URL key, is_active) for each mapped store - Preserve category hierarchy and positions - Generate detailed migration logs ## How It Works ### Category Migration Process 1. **Category Structure**: The tool reads all categories from Magento 1 and builds a tree structure 2. **Level-by-Level Migration**: Categories are migrated level by level, ensuring parent categories exist before child categories 3. **Attribute Migration**: For each store mapping, category attributes (name, URL key, is_active) are migrated to the corresponding Magento 2 store view 4. **Path Building**: Category paths are automatically built to maintain the correct hierarchy ### Database Tables Used **Magento 1:** - `catalog_category_entity` - Category entities - `catalog_category_entity_varchar` - Category text attributes - `catalog_category_entity_int` - Category integer attributes - `core_store` - Store information - `eav_attribute` - Attribute definitions - `eav_entity_type` - Entity type definitions **Magento 2:** - `catalog_category_entity` - Category entities - `catalog_category_entity_varchar` - Category text attributes - `catalog_category_entity_int` - Category integer attributes - `store` - Store information - `eav_attribute` - Attribute definitions - `eav_entity_type` - Entity type definitions ## Important Notes ⚠️ **Backup First**: Always backup your Magento 2 database before running the migration. ⚠️ **Test Environment**: It's recommended to test the migration on a development/staging environment first. ⚠️ **Store Mapping**: Ensure that store mappings are correct. Incorrect mappings may result in categories being assigned to the wrong store views. ⚠️ **Root Category**: The tool assumes Magento 2's root category ID is 2 (default). If your setup uses a different root category ID, you may need to adjust the code. ## Troubleshooting ### Connection Errors If you see connection errors: 1. Verify database credentials in `.env` 2. Ensure both databases are accessible from your Laravel application 3. Check database table prefixes if your Magento installations use them 4. Verify network connectivity and firewall settings ### Migration Errors If migration fails: 1. Check the migration logs in the web interface 2. Review Laravel logs: `storage/logs/laravel.log` 3. Ensure Magento 2 database has proper permissions 4. Verify that required Magento 2 tables exist ## Support For issues or questions, please check: - Laravel logs: `storage/logs/laravel.log` - Migration logs displayed in the web interface - Database connection status in the web interface