Skip to content

Instantly share code, notes, and snippets.

@ericrisler
Last active August 31, 2021 13:52
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ericrisler/674d9929101a3f9ecdca8fadf47e1cf3 to your computer and use it in GitHub Desktop.
Save ericrisler/674d9929101a3f9ecdca8fadf47e1cf3 to your computer and use it in GitHub Desktop.
Magento2 Essentials

Essential Reading

Composer and M2: http://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/composer-integration.html

Dependency Injection (and di.xml details): http://devdocs.magento.com/guides/v2.1/extension-dev-guide/depend-inj.html

Object Manager: http://alanstorm.com/magento_2_object_manager http://alanstorm.com/magento_2_object_manager_instance_objects

Install & Upgrade Script: http://inchoo.net/magento-2/setup-scripts-magento-2/

Serving frontend content, production vs development "modes", adding js to a site, etc: http://alanstorm.com/magento-2-frontend-files-serving

Phrase class and __() in M2: https://gist.github.com/antonmakarenko/7538216

Magento 2 Product Attributes: http://docs.magento.com/m2/ce/user_guide/stores/attributes-product.html

Multiple Websites, Stores and Store Views: http://devdocs.magento.com/guides/v2.0/config-guide/multi-site/ms_over.html

Javascript - jQueryUI Widget Factory: http://learn.jquery.com/jquery-ui/widget-factory/

Magento Javascript Devloper Guide: http://devdocs.magento.com/guides/v2.1/javascript-dev-guide/bk-javascript-dev-guide.html

Magento2 Import Columns: https://firebearstudio.com/blog/the-complete-guide-to-magento-2-product-import-export.html

Full Pacge Cache and Varnish in Magento2: https://inviqa.com/blog/how-full-page-cache-works-magento-2

CLI Administration

Update your env.php with new credentials:

php bin/magento setup:config:set --db-host="host" --db-name="database_name" --db-user="user" --db-password="pass"

Change the base url:

php bin/magento setup:store-config:set --base-url="http://someurl" --base-url-secure="https://somesecureurl"

Compile all auto-generated classes: This happens automatically on page load but you really should do this manually.

php bin/magento setup:di:compile

SQL to clear products, customers, categories, etc

-- Magento2
-- Clear product, orders, customers, reviews, etc.
SET FOREIGN_KEY_CHECKS = 0;

-- orders
TRUNCATE TABLE `gift_message`;
TRUNCATE TABLE `quote`;
TRUNCATE TABLE `quote_address`;
TRUNCATE TABLE `quote_address_item`;
TRUNCATE TABLE `quote_id_mask`;
TRUNCATE TABLE `quote_item`;
TRUNCATE TABLE `quote_item_option`;
TRUNCATE TABLE `quote_payment`;
TRUNCATE TABLE `quote_shipping_rate`;
TRUNCATE TABLE `reporting_orders`;
TRUNCATE TABLE `sales_bestsellers_aggregated_daily`;
TRUNCATE TABLE `sales_bestsellers_aggregated_monthly`;
TRUNCATE TABLE `sales_bestsellers_aggregated_yearly`;
TRUNCATE TABLE `sales_creditmemo`;
TRUNCATE TABLE `sales_creditmemo_comment`;
TRUNCATE TABLE `sales_creditmemo_grid`;
TRUNCATE TABLE `sales_creditmemo_item`;
TRUNCATE TABLE `sales_invoice`;
TRUNCATE TABLE `sales_invoiced_aggregated`;
TRUNCATE TABLE `sales_invoiced_aggregated_order`;
TRUNCATE TABLE `sales_invoice_comment`;
TRUNCATE TABLE `sales_invoice_grid`;
TRUNCATE TABLE `sales_invoice_item`;
TRUNCATE TABLE `sales_order`;
TRUNCATE TABLE `sales_order_address`;
TRUNCATE TABLE `sales_order_aggregated_created`;
TRUNCATE TABLE `sales_order_aggregated_updated`;
TRUNCATE TABLE `sales_order_grid`;
TRUNCATE TABLE `sales_order_item`;
TRUNCATE TABLE `sales_order_payment`;
TRUNCATE TABLE `sales_order_status_history`;
TRUNCATE TABLE `sales_order_tax`;
TRUNCATE TABLE `sales_order_tax_item`;
TRUNCATE TABLE `sales_payment_transaction`;
TRUNCATE TABLE `sales_refunded_aggregated`;
TRUNCATE TABLE `sales_refunded_aggregated_order`;
TRUNCATE TABLE `sales_shipment`;
TRUNCATE TABLE `sales_shipment_comment`;
TRUNCATE TABLE `sales_shipment_grid`;
TRUNCATE TABLE `sales_shipment_item`;
TRUNCATE TABLE `sales_shipment_track`;
TRUNCATE TABLE `sales_shipping_aggregated`;
TRUNCATE TABLE `sales_shipping_aggregated_order`;
TRUNCATE TABLE `tax_order_aggregated_created`;
TRUNCATE TABLE `tax_order_aggregated_updated`;

-- customers
TRUNCATE TABLE `customer_address_entity`;
TRUNCATE TABLE `customer_address_entity_datetime`;
TRUNCATE TABLE `customer_address_entity_decimal`;
TRUNCATE TABLE `customer_address_entity_int`;
TRUNCATE TABLE `customer_address_entity_text`;
TRUNCATE TABLE `customer_address_entity_varchar`;
TRUNCATE TABLE `customer_entity`;
TRUNCATE TABLE `customer_entity_datetime`;
TRUNCATE TABLE `customer_entity_decimal`;
TRUNCATE TABLE `customer_entity_int`;
TRUNCATE TABLE `customer_entity_text`;
TRUNCATE TABLE `customer_entity_varchar`;
TRUNCATE TABLE `customer_grid_flat`;
TRUNCATE TABLE `customer_log`;
TRUNCATE TABLE `customer_log`;
TRUNCATE TABLE `customer_visitor`;
TRUNCATE TABLE `persistent_session`;
TRUNCATE TABLE `wishlist`;
TRUNCATE TABLE `wishlist_item`;
TRUNCATE TABLE `wishlist_item_option`;

-- review
TRUNCATE TABLE `review`;
TRUNCATE TABLE `review_detail`;
TRUNCATE TABLE `review_entity_summary`;
TRUNCATE TABLE `review_store`;

-- products
-- TRUNCATE TABLE `cataloginventory_stock`;
TRUNCATE TABLE `cataloginventory_stock_item`;
TRUNCATE TABLE `cataloginventory_stock_status`;
TRUNCATE TABLE `cataloginventory_stock_status_idx`;
TRUNCATE TABLE `cataloginventory_stock_status_tmp`;
TRUNCATE TABLE `catalog_category_product`;
TRUNCATE TABLE `catalog_category_product_index`;
TRUNCATE TABLE `catalog_category_product_index_tmp`;
TRUNCATE TABLE `catalog_compare_item`;
TRUNCATE TABLE `catalog_product_bundle_option`;
TRUNCATE TABLE `catalog_product_bundle_option_value`;
TRUNCATE TABLE `catalog_product_bundle_price_index`;
TRUNCATE TABLE `catalog_product_bundle_selection`;
TRUNCATE TABLE `catalog_product_bundle_selection_price`;
TRUNCATE TABLE `catalog_product_bundle_stock_index`;
TRUNCATE TABLE `catalog_product_entity`;
TRUNCATE TABLE `catalog_product_entity_datetime`;
TRUNCATE TABLE `catalog_product_entity_decimal`;
TRUNCATE TABLE `catalog_product_entity_gallery`;
TRUNCATE TABLE `catalog_product_entity_int`;
TRUNCATE TABLE `catalog_product_entity_media_gallery`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value_to_entity`;
TRUNCATE TABLE `catalog_product_entity_media_gallery_value_video`;
TRUNCATE TABLE `catalog_product_entity_text`;
TRUNCATE TABLE `catalog_product_entity_tier_price`;
TRUNCATE TABLE `catalog_product_entity_varchar`;
TRUNCATE TABLE `catalog_product_index_eav`;
TRUNCATE TABLE `catalog_product_index_eav_decimal`;
TRUNCATE TABLE `catalog_product_index_eav_decimal_idx`;
TRUNCATE TABLE `catalog_product_index_eav_decimal_tmp`;
TRUNCATE TABLE `catalog_product_index_eav_idx`;
TRUNCATE TABLE `catalog_product_index_eav_tmp`;
TRUNCATE TABLE `catalog_product_index_price`;
TRUNCATE TABLE `catalog_product_index_price_bundle_idx`;
TRUNCATE TABLE `catalog_product_index_price_bundle_opt_idx`;
TRUNCATE TABLE `catalog_product_index_price_bundle_opt_tmp`;
TRUNCATE TABLE `catalog_product_index_price_bundle_sel_idx`;
TRUNCATE TABLE `catalog_product_index_price_bundle_sel_tmp`;
TRUNCATE TABLE `catalog_product_index_price_bundle_tmp`;
TRUNCATE TABLE `catalog_product_index_price_cfg_opt_agr_idx`;
TRUNCATE TABLE `catalog_product_index_price_cfg_opt_agr_tmp`;
TRUNCATE TABLE `catalog_product_index_price_cfg_opt_idx`;
TRUNCATE TABLE `catalog_product_index_price_cfg_opt_tmp`;
TRUNCATE TABLE `catalog_product_index_price_downlod_idx`;
TRUNCATE TABLE `catalog_product_index_price_downlod_tmp`;
TRUNCATE TABLE `catalog_product_index_price_final_idx`;
TRUNCATE TABLE `catalog_product_index_price_final_tmp`;
TRUNCATE TABLE `catalog_product_index_price_idx`;
TRUNCATE TABLE `catalog_product_index_price_opt_agr_idx`;
TRUNCATE TABLE `catalog_product_index_price_opt_agr_tmp`;
TRUNCATE TABLE `catalog_product_index_price_opt_idx`;
TRUNCATE TABLE `catalog_product_index_price_opt_tmp`;
TRUNCATE TABLE `catalog_product_index_price_tmp`;
TRUNCATE TABLE `catalog_product_index_tier_price`;
TRUNCATE TABLE `catalog_product_index_website`;
TRUNCATE TABLE `catalog_product_link`;
TRUNCATE TABLE `catalog_product_link_attribute`;
TRUNCATE TABLE `catalog_product_link_attribute_decimal`;
TRUNCATE TABLE `catalog_product_link_attribute_int`;
TRUNCATE TABLE `catalog_product_link_attribute_varchar`;
TRUNCATE TABLE `catalog_product_option`;
TRUNCATE TABLE `catalog_product_option_price`;
TRUNCATE TABLE `catalog_product_option_title`;
TRUNCATE TABLE `catalog_product_option_type_price`;
TRUNCATE TABLE `catalog_product_option_type_title`;
TRUNCATE TABLE `catalog_product_option_type_value`;
TRUNCATE TABLE `catalog_product_relation`;
TRUNCATE TABLE `catalog_product_super_attribute`;
TRUNCATE TABLE `catalog_product_super_attribute_label`;
TRUNCATE TABLE `catalog_product_super_link`;
TRUNCATE TABLE `catalog_product_website`;
TRUNCATE TABLE `catalog_url_rewrite_product_category`;
TRUNCATE TABLE `downloadable_link`;
TRUNCATE TABLE `downloadable_link_price`;
TRUNCATE TABLE `downloadable_link_purchased`;
TRUNCATE TABLE `downloadable_link_purchased_item`;
TRUNCATE TABLE `downloadable_link_title`;
TRUNCATE TABLE `downloadable_sample`;
TRUNCATE TABLE `downloadable_sample_title`;
TRUNCATE TABLE `product_alert_price`;
TRUNCATE TABLE `product_alert_stock`;
TRUNCATE TABLE `report_compared_product_index`;
TRUNCATE TABLE `report_viewed_product_aggregated_daily`;
TRUNCATE TABLE `report_viewed_product_aggregated_monthly`;
TRUNCATE TABLE `report_viewed_product_aggregated_yearly`;
TRUNCATE TABLE `report_viewed_product_index`;
-- remove related rewrites
DELETE FROM `url_rewrite` WHERE `entity_type`='product';

-- categories
-- we don't want to remove and "Root" or "Default" category data.
-- TRUNCATE TABLE `catalog_category_entity`; 
-- TRUNCATE TABLE `catalog_category_entity_datetime`; 
-- TRUNCATE TABLE `catalog_category_entity_decimal`; 
-- TRUNCATE TABLE `catalog_category_entity_int`; 
-- TRUNCATE TABLE `catalog_category_entity_text`; 
-- TRUNCATE TABLE `catalog_category_entity_varchar`; 
DELETE FROM `catalog_category_entity` WHERE entity_id NOT IN (1,2); 
DELETE FROM `catalog_category_entity_datetime` WHERE entity_id NOT IN (1,2); 
DELETE FROM `catalog_category_entity_decimal` WHERE entity_id NOT IN (1,2); 
DELETE FROM `catalog_category_entity_int` WHERE entity_id NOT IN (1,2); 
DELETE FROM `catalog_category_entity_text` WHERE entity_id NOT IN (1,2); 
DELETE FROM `catalog_category_entity_varchar` WHERE entity_id NOT IN (1,2); 
TRUNCATE TABLE `catalog_category_product`; 
TRUNCATE TABLE `catalog_category_product_index`;
-- remove related rewrites
DELETE FROM `url_rewrite` WHERE `entity_type`='category';


SET FOREIGN_KEY_CHECKS = 1;

SQL to drop all tables

credit: http://stackoverflow.com/questions/3476765/mysql-drop-all-tables-ignoring-foreign-keys

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
   DECLARE _done INT DEFAULT FALSE;
   DECLARE _tableName VARCHAR(255);
   DECLARE _cursor CURSOR FOR
       SELECT table_name 
       FROM information_schema.TABLES
       WHERE table_schema = SCHEMA();
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

   SET FOREIGN_KEY_CHECKS = 0;

   OPEN _cursor;

   REPEAT FETCH _cursor INTO _tableName;

   IF NOT _done THEN
       SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
       PREPARE stmt1 FROM @stmt_sql;
       EXECUTE stmt1;
       DEALLOCATE PREPARE stmt1;
   END IF;

   UNTIL _done END REPEAT;

   CLOSE _cursor;
   SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;

Debugging Tips

  1. Adding or Removing a module using composer on your dev server and updating live server you will have to run the module:enable cli command, setup:upgrade and setup:di:compile on the live server to process the changes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment