sabato 23 agosto 2014

Eliminazione delle immagini dal Database MySql e struttura EAV del database di Magento

Eliminazione delle immagini dal Database MySql di Magento

Su Magento può capitare di voler eliminare le immagini dei prodotti direttamente dal database. Per farlo occorre modificare i dati delle seguenti tabelle coinvolte sono:
  • catalog_product_entity_varchar
  • catalog_product_entity_media_gallery
  • catalog_product_entity_media_gallery_value

Le tabelle della galleria

Le seguenti tabelle:
  • catalog_product_entity_media_gallery
  • catalog_product_entity_media_gallery_value
contengono le immagini della galleria, per eliminare tutti i record è quindi sufficiente eseguire le seguenti query:
DELETE FROM catalog_product_entity_media_gallery_value
DELETE FROM catalog_product_entity_media_gallery
A causa delle Foreign Key un comando TRUNCATE non funzionerebbe.

Infine si possono eliminare le immagini dalla tabella:


  • catalog_product_entity_varchar

E' possibile utilizzare la seguente istruzione SQL:
DELETE FROM `catalog_product_entity_varchar` WHERE `attribute_id`=85 OR `attribute_id`=86 OR `attribute_id`=87
I valori 85 - 86 - 87 della clausola WHERE rappresentano i vari formati di immagine disponibili per il prodotto su Magento (image, thumb, small).

Osservazioni sulla struttura della tabella catalog_product_entity_varchar e sul database EAV di Magento 

Questa tabella contiene gli attributi di tipo VARCHAR dei prodotti inseriti. In Magento la maggior parte delle informazioni relative ai prodotti sono gestite come attributi. Quindi un'istruzione DELETE senza nessuna WHERE specificata come nel caso delle tabelle relative alla galleria delle immagini cancellerebbe, non solo i riferimenti ai file delle immagini dei prodotti ma anche altre informazioni.

I campi della tabella sono i seguenti:

* value_id, la chiave primaria della tabella
* entity_type_id, il tipo di entità, nel caso dei prodotti del catalogo il valore è sempre 4
* attribute_id, il tipo di attributo da cancellare
* store_id, l'id del negozio (sarà sempre 1 se non gestite un sito multilingua o un multistore)
* entity_id, l'id del recordprodotto
* value, il valore effettivamente inserito

Se volete verificare quali informazioni sono disponibili per un singolo prodotto (supponiamo quello con id 363) potete quindi eseguire la seguente query:
SELECT * FROM  `catalog_product_entity_varchar` WHERE  `entity_id` =363;
troverete tutti gli attributi assegnati a quel prodotto. Per conoscere a cosa corrisponde il valore dell'attribute_id, è sufficiente andare nel pannello di controllo su CATALOGO->ATTRIBUTI->GESTIONE ATTRIBUTI e  verificare il valore dell'attributo.

Se filtrerete i nomi degli attributi con i seguenti codici attributo:

* thumbnail
* image
* small_image

troverete appunto gli id 85, 86 e 87.

Per saperne di più sulla struttura EAV del database di Magento:

Nessun commento:

Posta un commento