回答:
最速の方法は、このクエリを直接実行することです。
DELETE FROM `catalog_product_entity` WHERE `sku` IN ('SKU1', 'SKU2', ...., 'SKU1000');
すべてがうまくカスケードされるはずです。属性値が削除され、カテゴリの関係が削除され、アップセル、クロスセル、関連などが行われます。
[編集]
これには問題があります。これを見つけてくれたSTWに感謝します。レビューと評価は、それらの製品テーブルに外部キーがないため、孤立したままになります。
->delete()
が、イベントをリッスンするコードを回避します。Magentoの在庫は、レビューと評価が孤立しているようです(関連製品が削除されても削除されません)。
catalog_product_entity_*
テーブルには、entity_id
フィールドからフィールドへのFK がありcatalog_product_entity.entity_id
ます。彼らはうまくカスケードする必要があります。
Mariusに敬意を表しますが、回避できない場合はデータベースと直接対話しないでください。たぶん、 Magentoの、すべてのあなたの拡張機能のご使用のリリースはバグのない正しい場所全てである場合、関連するテーブルは、自動的に更新されます。しかし、そうでないと、そのようなことがサイトを破壊する可能性があります。
代わりに、Magento独自のCSVインポート機能を使用できます。
次のように、ファイルにSKUをリストするだけです。
sku
ABC1
ABC2
ABC3
...等。次に、CSVファイルとして保存します。
次に、[システム]> [インポート/エクスポート]> [インポート]で、[エンティティタイプ:製品]および[インポート動作:エンティティの削除]を選択し、このファイルをインポートします。以上です!
Mage_ImportExport_Model_Import_Entity_Product::_deleteProducts()
)
プログラムで実行できます。削除するすべてのskusをリストしたskustodelete.csvを作成します。その後、さらに先に進むコードがあります
require_once 'app/Mage.php';
Mage :: app("default")->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);
$skuAll = array();
$file_handle = fopen("skustodelete.csv", "r");
$catalog = Mage::getModel('catalog/product');
while (!feof($file_handle)) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
$product = $catalog->loadByAttribute('sku', $allSku);
try {
$product->delete();
echo "Product with ID: " . $product->getId() . " Deleted Successfully". PHP_EOL;
} catch (Exception $e) {
echo "Product with ID: " . $product->getId() . "cannot be deleted" . PHP_EOL;
}
}
echo "Finish Delete";
コードなしの方法
下の管理セクションでManage Products
は、すべての製品のグリッドが表示されます。という列がありますSKU
。ここで、値に基づいて製品をフィルタリングできます。
次に、SKUでフィルタリングしたら、左側のチェックボックスを使用して、削除するすべてのアイテムを選択できます。
select all
これは、完全なグリッド内のすべてのアイテムを選択し、グリッドselect visible
の現在のページ上のアイテムのみを選択することに注意してください。
必要な項目を選択したら、グリッドの右上にある一括操作ボタンを使用して、削除オプションを選択できます。
これにより、これらのアイテムを削除することを確認するように求められます。このポップアップで[はい]を選択すると、アイテムの削除に進みます。インデックス設定によっては、このプロセスの後にインデックスの再作成が必要になる場合があります。
Kevin S、csvファイルで製品を削除できます。大波の手順に従ってください
ステップ1 :
csvファイルを作成し、システムから削除するskusを過ぎます。skus.csvとしてファイル名を付けます
ステップ2 :
ルートディレクトリにphpファイルを作成して置き換えます。その後、次のコードを過ぎて
require_once '../app/Mage.php';
Mage :: app("default") -> setCurrentStore( Mage_Core_Model_App :: ADMIN_STORE_ID );
$skuAll =array();
$file_handle = fopen("skus.csv", "r");
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$allSku = $line_of_text[0];
}
$products = Mage::getResourceModel('catalog/product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter(
'sku', array('in' => $allSku)
)
->load();
if(is_array($products))
{
foreach ($products as $key => $pId)
{
try
{
$product = Mage::getModel('catalog/product')->load($pId)->delete();
echo "successfully deleted product with ID: ". $pId ."<br />";
}
catch (Exception $e)
{
echo "Could not delete product with ID: ". $pId ."<br />";
}
}
}
注: このコードを実行する前に、バックアップを取得する必要があることをお勧めします。私はそれがあなたを助けることを願っています。
リストテーブル
catalog_product_entityの外部キーです。
したがって、catalog_product_entityのレコードを削除すると、上記のテーブルの一部のレコードも削除されます。
コード(マリウスの答えを実装)は、entity_id <= 18069を持つすべての製品を削除します。
$adapter = $setup->getConnection("catalog_write");
$where = array(
'entity_id <= ?' => '18069'
);
$tableCatalogProduct = Mage::getModel("catalog/product")->getResource()->getEntityTable();
$adapter->delete($tableCatalogProduct, $where);
$tableRating = Mage::getModel("rating/rating")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);
$tableRating = Mage::getModel("review/review")->getResource()->getMainTable();
$adapter->delete($tableRating, $where);