Попытка разграничить категории и продукты в Magento 2 - PullRequest
0 голосов
/ 21 сентября 2019

Мы пытаемся удалить идентификаторы категории для конкретного продукта с помощью сценария.Мой подход состоит в том, чтобы сначала создать файл 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');

Любые предложения по этому поводу будут оценены.Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...