Eliminar producto via SQL

entolium

Nuevo usuario
Hola,

He estado leyendo por ahí, que para borrar un producto, es suficiente con eliminarlo de la tabla catalog_product_entity.

¿Alguien podría confirmarlo?

Con tantas tablas en la BD, ¿no quedará rastro? ¿se eliminan los registros en cascada?.

Gracias.
 

Xarlie

Super Moderador
Miembro del equipo
No estaría yo tan seguro... cuando guardas un producto se guarda en muchas tablas, de categorías, de productos, de índices...
Seguramente al borrar de esa tabla borres el índice principal, pero tendrás datos sueltos perdidos... por lo que no se borrará en cascada
 

entolium

Nuevo usuario
Tengo todo el catálogo en una BD local para gestionarlo offline. Voy añadiendo productos a base de generar los csv e importando con el Dataflow.

El "problema", es que prácticamente todos los días desaparecen productos del catálogo. Saco un listado de productos descatalogados, y como dices, voy al Admin y los elimino.

Lo que me gustaría es hacerlo automáticamente, porque es un poco tedioso hacer esto a diario. Ya he automatizado otras tareas, y este sería un paso más.
 

OSdave

Super Moderador
Miembro del equipo
supongo que lo mejor seria hacerlo a traves del API, a ver si Xarli o Damian te pueden indicar más.
 

Xarlie

Super Moderador
Miembro del equipo
Ya que no puedes hacerlo más que por base de datos, tendrás que buscar el producto en todas las tablas catalog_product_*

Las tablas que se actualizan al guardar un producto son:

catalog_product_entity
catalog_product_entity_varchar
catalog_product_entity_text
catalog_product_entity_decimal
catalog_product_entity_datetime
catalog_product_entity_int
catalog_product_website
catalog_category_product
catalog_category_product_index
catalog_product_enabled_index
catalog_product_entity_media_gallery
catalog_product_entity_media_gallery_value
catalog_product_entity_tier_price
core_url_rewrite
catalogsearch_fulltext
catalogsearch_query
catalogsearch_result
catalogindex_aggregation
cataloginventory_stock_status
core_flag
catalogindex_eav
catalogindex_price
catalogindex_minimal_price
No se si me olvido de alguna... lógicamente algunas no tendrás más que refrescar el catálogo (desde la zona de caché) para que se actualicen, pero otras tendrás que ir buscando las relaciones entre tablas. (atributos, entities...)

***
La solución más sencilla es crearte un programita de PHP al que le pasas los datos que quieres borrar, se autentifica (no es dificil en magento mediante una pequeña petición vía post) y después borra los elementos llamando a la URL de eliminar.
Tan sólo tendrás que saber el identificador del producto y alguna cosa más.
 

error403

Miembro
Si tienes las tablas en InnoDB con borrar cierto id deberia borrarse todo lo demas, ya que las Foreign Key y el Delete On Cascade se encarga de todo, de todas formas, te recomendaria probarlo en alguna tienda que tengas por ahi "tirada" o hacer un backup de la base de datos antes de probarlo. Si Varien hizo bien las cosas con respecto a las relaciones internar, deberia ir bien. Saludos y despues nos cuentas
 

entolium

Nuevo usuario
No me atrevo a buscar y borrar de las citadas tablas, por si me dejo algo.
Creo que tienes razón con las Foreign Keys, aunque como en el caso anterior, sin la certeza de que es así tampoco me atrevo. No tengo ninguna tienda "inservible" donde probar.

Ya me cargué la BD una vez :jeje:...
 

Xarlie

Super Moderador
Miembro del equipo
En teoría las relaciones de las tablas se tendría que hacer eso, pero ¿estamos seguros de que no nos olvidamos algún dato?
Habría que ir revisando las tablas :)
Yo, personalmente, lo desaconsejo
 

error403

Miembro
Probaste con la api? No seria dificil armar un pequeño script en php que se encargue de borrar mediante la API los SKU de productos que encuentre en, por ejemplo, un dato que venga mediante un post
 

entolium

Nuevo usuario
Mi solución final: marcar los artículos que quiero eliminar como Estado=Deshabilitado.
Despues, entro en el admin>catálogo>gestionar los productos, filtro por deshabilitados y los elimino de una "tacada".

Ya sé que es una solución de cobarde :jeje:, pero de momento me vale.
 
Arriba