Мы пытаемся удалить идентификаторы категории для конкретного продукта с помощью сценария.Мой подход состоит в том, чтобы сначала создать файл CSV, а затем удалить существующую категорию и добавить новую категорию после редактирования сгенерированного файла CSV.
Все работает нормально, однако мой процесс удаления загружается и загружается.
У меня есть проверка одного и того же скрипта на 2 разных серверах и localhost.Сценарий отлично работает на другом сайте, но на определенном сервере, на котором работает производственный сайт, часть, где сценарий разделяет категории продуктов в Magento, не отвечает.
Я делюсь своим подходом, пожалуйста, дайте мне знать, где я ошибаюсь.
Я также пытался с помощью запроса на удаление, чтобы напрямую удалить данные из базы данных, без ошибок, но при запускеадминистратор magento никакая категория не удалена оттуда.
Это мой первый подход.
if (($handle = fopen('sample.csv', 'r')) !== FALSE)
{ // Check the resource is valid
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{ // Check opening the file is OK!
//$row++;
//if($row == 1) continue;
//print_r($data);die('abc');
$sku= $data[1];
$productCategories = $data[2];
$categoryIds = explode(',',$productCategories);
//echo "<pre>"; print_r($categoryIds);die('ab');
if(!empty($data[0])){
$setCategoryIds = array();
$productId = $data[0];
//print_r($productId);die('star');
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$setCategoryIds = $product->getCategoryIds();
//print_r($setCategoryIds);die('star');
foreach($setCategoryIds as $val){
//$productId = $objectManager->get('Magento\Catalog\Model\Product')->getIdBySku($value['SKU']);
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$setCategoryIds1 = $product->getCategoryIds();
//print_r($setCategoryIds1);die('star');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$CategoryLinkRepository = $objectManager->get('\Magento\Catalog\Model\CategoryLinkRepository');
$CategoryLinkRepository->deleteByIds($setCategoryIds1[0],$sku);
}
}
Это мой второй подход.
<?php
use Magento\Framework\App\Bootstrap;
include('../app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
ini_set('display_errors', 1);
$objectManager = $bootstrap->getObjectManager();
$storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface');
$appState = $objectManager->get('\Magento\Framework\App\State');
$appState->setAreaCode('frontend');
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$tableName = $resource->getTableName('catalog_product_entity');
$tableName1 = $resource->getTableName('catalog_product_entity_varchar');
//Product repository interface
//$productRepository = $objectManager->create('Magento\Catalog\Api\ProductRepositoryInterface');
//$CategoryLinkRepository = $objectManager->create('\Magento\Catalog\Model\CategoryLinkRepository');
//$sku = '9789960892269';
//$CategoryLinkRepository->deleteByIds('9789960892269',$sku);
//echo "check";die();
//$row = 0;
if (($handle = fopen('sample.csv', 'r')) !== FALSE) { // Check the resource is valid
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { // Check opening the file is OK!
//$row++;
//if($row == 1) continue;
//print_r($data);die('abc');
$sku= $data[1];
$productCategories = $data[2];
$categoryIds = explode(',',$productCategories);
$name = $data[0];
$query = "Select entitytable.entity_id,texttable.value from ".$tableName." as entitytable Left Join ".$tableName1." as texttable on entitytable.entity_id= texttable.entity_id where texttable.value='".$name."'";
$dataq = $connection->fetchRow($query);
//print_r($dataq);
if(!empty($dataq['entity_id'])){
$setCategoryIds = array();
$productId = $dataq['entity_id'];
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$setCategoryIds = $product->getCategoryIds();
//print_r($setCategoryIds);die('star');
foreach($setCategoryIds as $val){
//$productId = $objectManager->get('Magento\Catalog\Model\Product')->getIdBySku($value['SKU']);
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$setCategoryIds1 = $product->getCategoryIds();
//print_r($setCategoryIds1);die('hi');
$CategoryLinkRepository = $objectManager->get('\Magento\Catalog\Model\CategoryLinkRepository');
$CategoryLinkRepository->deleteByIds($setCategoryIds1[0],$product->getSku());
}
echo "Delete";
}
По моему мнению, это занимает время, потому что здесь загружается весь продукт через magento, но то же самое работает на другом сервере.
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($productId);
$CategoryLinkRepository = $objectManager->get('\Magento\Catalog\Model\CategoryLinkRepository');
Любые предложения по этому поводу будут оценены.Спасибо