CmsFan Posted December 2, 2014 Share Posted December 2, 2014 Buenos días, Tengo un montón de artículos (como 60.000) en una tienda, que va muy relantizada por este motivo. Cómo podría borrar de una sola consulta todos los artículos que tienen stock 0? Los que están en stock cero, la gran mayoría ya están obsoletos (se trata de tienda normal de pc's, impresoras...) Link to comment Share on other sites More sharing options...
CmsFan Posted December 2, 2014 Author Share Posted December 2, 2014 Hola, alguna idea? Lo digo porque eliminarlo a través dl Back Office tarda horas solo para eliminar 500 o 600, es interminable... De todos modos, es mejor hacerlo a través del Back office aunque tarde tanto? Quizás está borrando mejor los datos (incluidas relaciones y vinculaciones) que si se hiciera con una simple consulta mysql? Link to comment Share on other sites More sharing options...
CmsFan Posted December 3, 2014 Author Share Posted December 3, 2014 Buenas...Alguna luz sobre este tema de borrar los productos de la tienda de forma masiva? Link to comment Share on other sites More sharing options...
CmsFan Posted December 4, 2014 Author Share Posted December 4, 2014 ayudas? Link to comment Share on other sites More sharing options...
Enrique Gómez Posted December 5, 2014 Share Posted December 5, 2014 Tienes que tener en cuenta que hacerlo con un SQL delete puede ser complicado y hasta contraproducente.. pueden quedar cosas colgadas Este es el método delete de Product que es usado en un 1.6.09, como ves hay muchas dependencias que borra. Y además llama al delete normal de prestashop que se ocupa de borrar entradas de multitienda, lenguaje..etc public function delete() { /* * @since 1.5.0 * It is NOT possible to delete a product if there are currently: * - physical stock for this product * - supply order(s) for this product */ if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $this->advanced_stock_management) { $stock_manager = StockManagerFactory::getManager(); $physical_quantity = $stock_manager->getProductPhysicalQuantities($this->id, 0); $real_quantity = $stock_manager->getProductRealQuantities($this->id, 0); if ($physical_quantity > 0) return false; if ($real_quantity > $physical_quantity) return false; } $result = parent::delete(); // Removes the product from StockAvailable, for the current shop StockAvailable::removeProductFromStockAvailable($this->id); $result &= ($this->deleteProductAttributes() && $this->deleteImages() && $this->deleteSceneProducts()); // If there are still entries in product_shop, don't remove completly the product if ($this->hasMultishopEntries()) return true; Hook::exec('actionProductDelete', array('product' => $this)); if (!$result || !GroupReduction::deleteProductReduction($this->id) || !$this->deleteCategories(true) || !$this->deleteProductFeatures() || !$this->deleteTags() || !$this->deleteCartProducts() || !$this->deleteAttributesImpacts() || !$this->deleteAttachments(false) || !$this->deleteCustomization() || !SpecificPrice::deleteByProductId((int)$this->id) || !$this->deletePack() || !$this->deleteProductSale() || !$this->deleteSearchIndexes() || !$this->deleteAccessories() || !$this->deleteFromAccessories() || !$this->deleteFromSupplier() || !$this->deleteDownload() || !$this->deleteFromCartRules()) return false; return true; } En definitiva mas que por sql lo mejor es crearse un script php que saque todos los ids de productos sin stock y itere para borrar los productos via la API de prestashop (es decir $prod=new Product($id_prod); $prod->delete()) Link to comment Share on other sites More sharing options...
CmsFan Posted December 5, 2014 Author Share Posted December 5, 2014 Ok Enrique. Entonces, aunque tarde días en borrar todos los productos de la web, crees que es mejor hacerlo manualmente dentro del Back office? Me refiero a que si lo hago desde el back office, si se borrarán seguro correctamente todas las dependencias? Link to comment Share on other sites More sharing options...
ventura Posted December 5, 2014 Share Posted December 5, 2014 Puedes utilizar la herramienta store manager para realizar este tipo de operaciones de manera más rapida http://www.prestashop.com/es/asociados-de-industria/administracion/emagicone 1 Link to comment Share on other sites More sharing options...
Enrique Gómez Posted December 5, 2014 Share Posted December 5, 2014 (edited) Ok Enrique. Entonces, aunque tarde días en borrar todos los productos de la web, crees que es mejor hacerlo manualmente dentro del Back office? Me refiero a que si lo hago desde el back office, si se borrarán seguro correctamente todas las dependencias? Desde luego que si lo haces por el backoffice pasa por donde tiene que pasar y va a morir al delete(), por lo que no hay forma mas segura de borrar un producto Si el número de productos es demencial hacer el script es una buena idea. si te sirve de base puedes mirar este script para cambiar los passwords (es para 1.5.6 para 1.6 no lo he probado) http://www.prestashop.com/forums/topic/187719-contrasena-back-office/?p=928646 Nota: eso sí, copia de seguridad de toda la base de datos y si es posible hacerlo previamente en un entorno de pruebas. Esta claro que esto del script es para usuarios avanzados, si no sabes lo que estas haciendo mejor no tocar nada. Saludos Edited December 5, 2014 by Enrique Gómez (see edit history) Link to comment Share on other sites More sharing options...
CmsFan Posted December 5, 2014 Author Share Posted December 5, 2014 Ok, entonces realmente es mejor hacerlo por el B.O. Por otro lado, como dice Ventura, es una buena opción con el Emagic one? Al tener 30 días de prueba, sería suficiente para este caso puntual, verdad? Link to comment Share on other sites More sharing options...
Recommended Posts