Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

В پچھلا مضمون میں نے Magento 2 میں مصنوعات کی درآمد کے عمل کو معمول کے مطابق ماڈلز اور ریپوزٹریز کے ذریعے بیان کیا۔ معمول کے طریقہ کار میں ڈیٹا پروسیسنگ کی رفتار بہت کم ہوتی ہے۔ میرا لیپ ٹاپ فی سیکنڈ تقریباً ایک پروڈکٹ تیار کر رہا تھا۔ اس تسلسل میں، میں کسی پروڈکٹ کو درآمد کرنے کے متبادل طریقے پر غور کرتا ہوں - ڈیٹا بیس میں براہ راست داخلے کے ذریعے، معیاری Magento 2 میکانزم (ماڈل، فیکٹریاں، ذخیرے) کو نظرانداز کرتے ہوئے۔ مصنوعات کو درآمد کرنے کے اقدامات کی ترتیب کو کسی بھی پروگرامنگ زبان میں ڈھال لیا جا سکتا ہے جو MySQL کے ساتھ کام کر سکتی ہے۔

اعلانِ لاتعلقی: Magento کے لیے ریڈی میڈ فعالیت ہے۔ ڈیٹا کی درآمد اور، غالباً، یہ آپ کے لیے کافی ہوگا۔ تاہم، اگر آپ کو درآمدی عمل پر مزید مکمل کنٹرول کی ضرورت ہے، جو آپ کے پاس ہے اس کے لیے CSV فائل تیار کرنے تک محدود نہیں، بلی میں خوش آمدید۔

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

دونوں مضامین لکھنے کے نتیجے میں آنے والے کوڈ کو Magento ماڈیول میں دیکھا جا سکتا ہے۔flancer32/mage2_ext_demo_import" یہاں کچھ پابندیاں ہیں جن پر میں نے ڈیمو ماڈیول کوڈ کو آسان بنانے کے لیے پیروی کی:

  • مصنوعات صرف تخلیق کی جاتی ہیں، اپ ڈیٹ نہیں کی جاتی ہیں۔
  • ایک گودام
  • صرف زمرے کے نام درآمد کیے جاتے ہیں، ان کی ساخت کے بغیر
  • ڈیٹا ڈھانچے ورژن 2.3 کے مطابق ہیں۔

ایک پروڈکٹ درآمد کرنے کے لیے JSON:

{
  "sku": "MVA20D-UBV-3",
  "name": "Заглушка для пломбировки ВА47-29 IEK",
  "desc": "Обеспечение доступа к устройствам ...",
  "desc_short": "Заглушка для пломбировки ВА47-29 IEK предназначена для ...",
  "price": 5.00,
  "qty": 25,
  "categories": ["Категория 1", "Категория 2"],
  "image_path": "mva20d_ubv_3.png"
}

درآمد کے اہم مراحل کا جائزہ

  • خود پروڈکٹ کی رجسٹریشن
  • مصنوعات اور ویب سائٹ کے درمیان کنکشن
  • بنیادی مصنوعات کی خصوصیات (EAV)
  • انوینٹری ڈیٹا (اسٹاک میں مصنوعات کی مقدار)
  • میڈیا (تصاویر)
  • کیٹلاگ کیٹیگریز کے ساتھ کنکشن

پروڈکٹ رجسٹریشن

پروڈکٹ کی بنیادی معلومات اس میں مل سکتی ہیں۔ catalog_product_entity:

CREATE TABLE `catalog_product_entity` (
  `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Entity Id',
  `attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Attribute Set ID',
  `type_id` varchar(32) NOT NULL DEFAULT 'simple' COMMENT 'Type ID',
  `sku` varchar(64) DEFAULT NULL COMMENT 'SKU',
  `has_options` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Has Options',
  `required_options` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Required Options',
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Creation Time',
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Update Time',
  PRIMARY KEY (`entity_id`),
  KEY `CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),
  KEY `CATALOG_PRODUCT_ENTITY_SKU` (`sku`)
)

پروڈکٹ رجسٹری میں اندراج بنانے کے لیے درکار کم از کم معلومات یہ ہیں:

  • attribute_set_id
  • sku

اضافی:

  • type_id - اگر ہم اس کی وضاحت نہیں کرتے ہیں، تو 'سادہ' استعمال کیا جائے گا۔

ڈیٹا بیس پر براہ راست لکھنے کے لیے، میں خود Magento کا DB اڈاپٹر استعمال کرتا ہوں:

function create($sku, $typeId, $attrSetId)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity');
    $bind = [
        'sku' => $sku,
        'type_id' => $typeId,
        'attribute_set_id' => $attrSetId
    ];
    $conn->insert($table, $bind);
    $result = $conn->lastInsertId($table);
    return $result;
}

کے ساتھ پروڈکٹ کو رجسٹر کرنے کے بعد catalog_product_entity یہ ایڈمن پینل میں، پروڈکٹ گرڈ میں نظر آتا ہے (کیٹلاگ/مصنوعات).

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

مصنوعات اور ویب سائٹ کے درمیان تعلق

سائٹ کے ساتھ پروڈکٹ کی وابستگی اس بات کا تعین کرتی ہے کہ کن اسٹورز اور ڈسپلے میں پروڈکٹ فرنٹ پر دستیاب ہوگی۔

function linkToWebsite($prodId, $websiteId)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_website');
    $bind = [
        'product_id' => $prodId,
        'website_id' => $websiteId
    ];
    $conn->insert($table, $bind);
}

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

مصنوعات کی بنیادی خصوصیات

نئی رجسٹرڈ پروڈکٹ کا ابھی تک کوئی نام یا تفصیل نہیں ہے۔ یہ سب کچھ کے ذریعے کیا جاتا ہے۔ EAV اوصاف. یہاں پراڈکٹ کے بنیادی اوصاف کی ایک فہرست ہے جو پروڈکٹ کو سامنے پر صحیح طریقے سے ظاہر کرنے کے لیے درکار ہیں:

  • name
  • price
  • description
  • short_description
  • status
  • tax_class_id
  • url_key
  • visibility

اس طرح کے پروڈکٹ میں ایک الگ وصف شامل کیا جاتا ہے (شناخت کنندہ حاصل کرنے کی تفصیلات اور اس کے کوڈ سے وصف کی قسم کو خارج کر دیا جاتا ہے):

public function create($prodId, $attrCode, $attrValue)
{
    $attrId = /* get attribute ID by attribute code */
    $attrType = /* get attribute type [datetime|decimal|int|text|varchar]) by attribute code */
    if ($attrId) {
        /** @var MagentoFrameworkAppResourceConnection $this->resource */
        /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
        $conn = $this->resource->getConnection();
        $tblName = 'catalog_product_entity_' . $attrType;
        $table = $this->resource->getTableName($tblName);
        $bind = [
            'attribute_id' => $attrId,
            'entity_id' => $prodId,
            /* put all attributes to default store view with id=0 (admin) */
            'store_id' => 0,
            'value' => $attrValue
        ];
        $conn->insert($table, $bind);
    }
}

انتساب کوڈ کا استعمال کرتے ہوئے، ہم اس کی شناخت اور ڈیٹا کی قسم کا تعین کرتے ہیں (datetime, decimal, int, text, varchar)، پھر انتظامی ونڈو کے لیے ڈیٹا کو مناسب جدول میں لکھیں (store_id = 0).

پروڈکٹ میں مندرجہ بالا صفات کو شامل کرنے کے بعد، آپ کو ایڈمن پینل میں یہ تصویر ملتی ہے:

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

انوینٹری ڈیٹا

Magento میں ورژن 2.3 سے شروع کرتے ہوئے، میزوں کے دو متوازی سیٹ ہیں جو انوینٹری کی معلومات کا ذخیرہ فراہم کرتے ہیں (مصنوعات کی مقدار):

  • cataloginventory_*: پرانا ڈھانچہ
  • inventory_*: نیا ڈھانچہ (MSI - ملٹی سورس انوینٹری)؛

آپ کو دونوں ڈھانچے میں انوینٹری ڈیٹا شامل کرنے کی ضرورت ہے، کیونکہ نیا ڈھانچہ ابھی تک پرانے سے مکمل طور پر آزاد نہیں ہے (یہ بہت ممکن ہے کہ اس کے لیے default نئے ڈھانچے میں گودام میں ایک میز شامل ہے۔ cataloginventory_stock_status کے طور پر inventory_stock_1).

cataloginventory_

میگنیٹو 2.3 کو تعینات کرتے وقت ہمارے پاس ابتدائی طور پر 2 اندراجات ہوتے ہیں۔ store_website، جو دو سائٹس کے مساوی ہے - انتظامی اور مرکزی کلائنٹ:

website_id|code |name        |sort_order|default_group_id|is_default|
----------|-----|------------|----------|----------------|----------|
         0|admin|Admin       |         0|               0|         0|
         1|base |Main Website|         0|               1|         1|

ٹیبل cataloginventory_stock ہمارے پاس صرف ایک اندراج ہے:

stock_id|website_id|stock_name|
--------|----------|----------|
       1|         0|Default   |

یعنی ہمارے پرانے ڈھانچے میں صرف ایک "گودام" ہے (stock) اور یہ انتظامی ویب سائٹ سے منسلک ہے۔ ایڈمن پینل کے ذریعے نئے شامل کرنا sources/stocks MSI میں (نئی ساخت) کے نتیجے میں نئی ​​اندراجات نہیں ہوتی ہیں۔ cataloginventory_stock.

پرانے ڈھانچے میں مصنوعات کے بارے میں انوینٹری ڈیٹا ابتدائی طور پر جدولوں میں ریکارڈ کیا جاتا ہے:

  • cataloginventory_stock_item
  • cataloginventory_stock_status

cataloginventory_stock_item

function createOldItem($prodId, $qty)
{
    $isQtyDecimal = (((int)$qty) != $qty);
    $isInStock = ($qty > 0);
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('cataloginventory_stock_item');
    $bind = [
        'product_id' => $prodId,
        /* we use one only stock in 'cataloginventory' structure by default */
        'stock_id' => 1,
        'qty' => $qty,
        'is_qty_decimal' => $isQtyDecimal,
        'is_in_stock' => $isInStock,
        /* default stock is bound to admin website (see `cataloginventory_stock`) */
        'website_id' => 0
    ];
    $conn->insert($table, $bind);
}

cataloginventory_stock_status

function createOldStatus($prodId, $qty)
{
    $isInStock = ($qty > 0);
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('cataloginventory_stock_status');
    $bind = [
        'product_id' => $prodId,
        /* we use one only stock in 'cataloginventory' structure by default */
        'stock_id' => 1, 
        'qty' => $qty,
        'stock_status' => MagentoCatalogInventoryApiDataStockStatusInterface::STATUS_IN_STOCK,
        /* default stock is bound to admin website (see `cataloginventory_stock`) */
        'website_id' => 0 
    ];
    $conn->insert($table, $bind);
}

انوینٹری_

ابتدائی طور پر، انوینٹری ڈیٹا کو ذخیرہ کرنے کے لیے نئے ڈھانچے میں 1 "ذرائع("inventory_source):

source_code|name          |enabled|description   |latitude|longitude|country_id|...|
-----------|--------------|-------|--------------|--------|---------|----------|...|
default    |Default Source|      1|Default Source|0.000000| 0.000000|US        |...|

اور ایک "گودام("inventory_stock):

stock_id|name         |
--------|-------------|
       1|Default Stock|

«ماخذ» مصنوعات کے لیے فزیکل اسٹوریج کی نمائندگی کرتا ہے (ریکارڈ میں فزیکل کوآرڈینیٹس اور میلنگ ایڈریس ہوتا ہے)۔ "گودام"متعدد "ذرائع" کا ایک منطقی اتحاد ہے (inventory_source_stock_link)

link_id|stock_id|source_code|priority|
-------|--------|-----------|--------|
      1|       1|default    |       1|

اس سطح پر جس پر سیلز چینل سے کنکشن ہوتا ہے (inventory_stock_sales_channel)

type   |code|stock_id|
-------|----|--------|
website|base|       1|

اعداد و شمار کے ڈھانچے کو دیکھتے ہوئے، مختلف قسم کے سیلز چینلز فرض کیے جاتے ہیں، لیکن پہلے سے طے شدہ طور پر صرف کنکشن "اسٹاک"-"ویب سائٹ"(ویب سائٹ کا لنک ویب سائٹ کوڈ کی پیروی کرتا ہے - base).

ایک"گودام"کئی سے منسلک کیا جا سکتا ہے"ذرائع"اور ایک "ذرائع"- کئی تک"گودام"(بہت سے زیادہ رشتہ)۔ مستثنیات پہلے سے طے شدہ ہیں "ذرائع"اور"گودام" وہ دوسرے اداروں سے دوبارہ منسلک نہیں ہیں (کوڈ کی سطح پر حد - غلطی "ڈیفالٹ سورس یا ڈیفالٹ اسٹاک سے متعلق لنک کو محفوظ نہیں کیا جا سکتا")۔ Magento 2 میں MSI ڈھانچے کے بارے میں مزید تفصیلات مضمون میں مل سکتی ہیں۔CQRS اور ایونٹ سورسنگ کا استعمال کرتے ہوئے ویئر ہاؤس مینجمنٹ سسٹم۔ ڈیزائن".

میں ڈیفالٹ کنفیگریشن استعمال کروں گا اور انوینٹری کی تمام معلومات کو سورس میں شامل کروں گا۔ default، جو کوڈ کے ساتھ ویب سائٹ سے وابستہ سیلز چینل میں شامل ہے۔ base (اسٹور کے سامنے والے سرے سے مساوی ہے - دیکھیں store_website):

function createNewItem($sku, $qty)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('inventory_source_item');
    $bind = [
        'source_code' => 'default',
        'sku' => $sku,
        'quantity' => $qty,
        'status' => MagentoInventoryApiApiDataSourceItemInterface::STATUS_IN_STOCK
    ];
    $conn->insert($table, $bind);
}

ایڈمن پینل میں پروڈکٹ میں انوینٹری ڈیٹا شامل کرنے کے بعد، آپ کو یہ تصویر ملتی ہے:

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

میڈیا

ایڈمن پینل کے ذریعے کسی پروڈکٹ میں "دستی طور پر" تصویر شامل کرنے پر، متعلقہ معلومات درج ذیل جدولوں میں لکھی جاتی ہیں:

  • catalog_product_entity_media_gallery: میڈیا رجسٹری (تصاویر اور ویڈیو فائلز)؛
  • catalog_product_entity_media_gallery_value: میڈیا کو مصنوعات اور نمائشوں سے جوڑنا (لوکلائزیشن)؛
  • catalog_product_entity_media_gallery_value_to_entity: میڈیا کو صرف مصنوعات سے منسلک کرنا (ممکنہ طور پر پروڈکٹ کے لیے پہلے سے طے شدہ میڈیا مواد)؛
  • catalog_product_entity_varchar: وہ کردار جن میں تصویر استعمال کی گئی ہے وہ یہاں محفوظ ہیں۔

اور تصاویر خود ڈائریکٹری میں محفوظ ہوجاتی ہیں۔ ./pub/media/catalog/product/x/y/جہاں x и y - تصویری فائل کے نام کے پہلے اور دوسرے حروف۔ مثال کے طور پر، فائل image.png کے طور پر محفوظ کیا جانا چاہئے ./pub/media/catalog/product/i/m/image.png، تاکہ پلیٹ فارم کیٹلاگ سے مصنوعات کی وضاحت کرتے وقت اسے بطور تصویر استعمال کر سکے۔

رجسٹر میں پوسٹ کیا گیا۔ ./pub/media/catalog/product/ میڈیا فائل (فائل رکھنے کے عمل پر اس مضمون میں بحث نہیں کی گئی ہے):

function createMediaGallery($imgPathPrefixed)
{
    $attrId = /* get attribute ID by attribute code 'media_gallery' */
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity_media_gallery');
    $bind = [
        'attribute_id' => $attrId,
        'value' => $imgPathPrefixed,
        /* 'image' or 'video' */
        'media_type' => 'image',
        'disabled' => false
    ];
    $conn->insert($table, $bind);
    $result = $conn->lastInsertId($table);
    return $result;
}

رجسٹر ہونے پر، ایک نئی میڈیا فائل کو ایک شناخت کنندہ تفویض کیا جاتا ہے۔

ہم رجسٹرڈ میڈیا فائل کو ڈیفالٹ اسٹور فرنٹ کے لیے متعلقہ پروڈکٹ کے ساتھ منسلک کرتے ہیں:

function createGalleryValue($mediaId, $prodId)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity_media_gallery_value');
    $bind = [
        'value_id' => $mediaId,
        /* use admin store view by default */
        'store_id' => 0,
        'entity_id' => $prodId,
        'label' => null,
        /* we have one only image */
        'position' => 1,
        'disabled' => false
    ];
    $conn->insert($table, $bind);
}

ہم رجسٹرڈ میڈیا فائل کو متعلقہ پروڈکٹ کے ساتھ کسی بھی اسٹور فرنٹ سے منسلک کیے بغیر منسلک کرتے ہیں۔ یہ واضح نہیں ہے کہ یہ ڈیٹا بالکل کہاں استعمال ہوا ہے اور پچھلے ٹیبل سے ڈیٹا تک رسائی کیوں ناممکن ہے، لیکن یہ ٹیبل موجود ہے اور جب پروڈکٹ میں تصویر شامل کی جاتی ہے تو اس پر ڈیٹا لکھا جاتا ہے۔ تو بس۔

function createGalleryValueToEntity($mediaId, $prodId)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_product_entity_media_gallery_value_to_entity');
    $bind = [
        'value_id' => $mediaId,
        'entity_id' => $prodId
    ];
    $conn->insert($table, $bind);
}

catalog_product_entity_varchar

ایک میڈیا فائل کو مختلف کرداروں کے ساتھ استعمال کیا جا سکتا ہے (متعلقہ انتساب کوڈ قوسین میں اشارہ کیا گیا ہے):

  • بنیاد(image)
  • چھوٹی تصویر (small_image)
  • تھمب نیل (thumbnail)
  • سویچ امیج (swatch_image)

میڈیا فائل سے کرداروں کو جوڑنا بالکل وہی ہے جو اس میں ہوتا ہے۔ catalog_product_entity_varchar. بائنڈنگ کوڈ میں کوڈ کی طرح ہے "مصنوعات کی بنیادی خصوصیات".

ایڈمن پینل میں پروڈکٹ میں تصویر شامل کرنے کے بعد یہ اس طرح لگتا ہے:

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

زمرہ جات

زمرہ کے لحاظ سے ڈیٹا پر مشتمل اہم میزیں:

  • catalog_category_entity: زمروں کا رجسٹر؛
  • catalog_category_product: مصنوعات اور زمروں کے درمیان تعلق؛
  • catalog_category_entity_*: EAV انتساب اقدار؛

ابتدائی طور پر، ایک خالی Magento ایپلی کیشن میں، زمرہ رجسٹری میں 2 زمرے ہوتے ہیں (میں نے کالم کے ناموں کو مختصر کیا: crt - created_at, upd - updated_at):

entity_id|attribute_set_id|parent_id|crt|upd|path|position|level|children_count|
---------|----------------|---------|---|---|----|--------|-----|--------------|
        1|               3|        0|...|...|1   |       0|    0|             1|
        2|               3|        1|...|...|1/2 |       1|    1|             0|

id=1 والا زمرہ پورے Magento کیٹلاگ کی جڑ ہے اور نہ تو ایڈمن پینل میں یا صفحہ اول پر دستیاب ہے۔ id=2 کے ساتھ زمرہ (پہلے سے طے شدہ زمرہ) مرکزی سائٹ کے مین اسٹور کے لیے روٹ کیٹیگری ہے (مرکزی ویب سائٹ اسٹورجب ایپلی کیشن تعینات کی جاتی ہے تو بنائی جاتی ہے (دیکھیں۔ ایڈمن / اسٹورز / تمام اسٹورز)۔ مزید یہ کہ اسٹور کی جڑ کیٹیگری بھی سامنے دستیاب نہیں ہے، صرف اس کی ذیلی زمرہ جات ہیں۔

چونکہ اس مضمون کا موضوع اب بھی مصنوعات پر ڈیٹا درآمد کر رہا ہے، اس لیے میں زمرہ جات بناتے وقت ڈیٹا بیس میں براہ راست داخلے کا استعمال نہیں کروں گا، لیکن خود Magento کی فراہم کردہ کلاسز کا استعمال کروں گا (ماڈل اور ریپوزٹریز)۔ ڈیٹا بیس میں براہ راست اندراج صرف درآمد شدہ پروڈکٹ کو زمرہ کے ساتھ منسلک کرنے کے لیے استعمال کیا جاتا ہے (زمرہ اس کے نام سے مماثل ہے، اور زمرہ کی شناخت مماثلت کے دوران حاصل کی جاتی ہے):

function create($prodId, $catId)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_category_product');
    $bind = [
        'category_id' => $catId,
        'product_id' => $prodId,
    ];
    $conn->insert($table, $bind);
}

زمرہ جات "کیٹیگری 1" اور "کیٹگری 2" میں پروڈکٹ کا لنک شامل کرنے کے بعد، ایڈمن پینل میں پروڈکٹ کی تفصیلات کچھ اس طرح نظر آتی ہیں:

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

اضافی کام

ڈیٹا کی درآمد مکمل ہونے کے بعد، آپ کو درج ذیل اضافی مراحل کو مکمل کرنے کی ضرورت ہے:

  • ڈیٹا انڈیکسنگ: کنسول میں کال کریں۔ ./bin/magento indexer:reindex;
  • مصنوعات/ زمرہ جات کے لیے یو آر ایل کو دوبارہ تخلیق کرنا: آپ ایکسٹینشن استعمال کر سکتے ہیں "elgentos/regenerate-catalog-urls«

اضافی کارروائیاں کرنے کے بعد ایڈمن پینل میں مصنوعات:

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

اور سامنے:

Magento 2: مصنوعات کو براہ راست ڈیٹا بیس میں درآمد کریں۔

خلاصہ

پروڈکٹس کا وہی سیٹ (10 ٹکڑے) جیسا کہ پچھلے مضمون میں ہے کم از کم ایک آرڈر کی شدت کے ساتھ تیزی سے درآمد کیا جاتا ہے (1 سیکنڈ بمقابلہ 10)۔ رفتار کا زیادہ درست اندازہ لگانے کے لیے، آپ کو پروڈکٹس کی ایک بڑی تعداد کی ضرورت ہے - کئی سو، یا اس سے بہتر لیکن ہزاروں۔ تاہم، ان پٹ ڈیٹا کے اتنے چھوٹے سائز کے ساتھ بھی، ہم یہ نتیجہ اخذ کر سکتے ہیں کہ میگینٹو (ماڈل اور ریپوزٹریز) کے ذریعہ فراہم کردہ ٹولز کا استعمال اہم ہے (میں زور دیتا ہوں - زیادہ سے زیادہ!) مطلوبہ فعالیت کی ترقی کو تیز کریں، لیکن ساتھ ہی نمایاں طور پر (میں زور دیتا ہوں - زیادہ سے زیادہ!) اس رفتار کو کم کریں جس سے ڈیٹا ڈیٹا بیس میں آتا ہے۔

اس کے نتیجے میں پانی گیلا نکلا اور یہ وحی نہیں ہے۔ تاہم، اب میرے پاس کھیلنے کا کوڈ ہے اور شاید کچھ اور دلچسپ نتائج پر پہنچوں۔

ماخذ: www.habr.com