Magento 2: නිෂ්පාදන සෘජුවම දත්ත ගබඩාවට ආනයනය කරන්න

В පෙර ලිපිය මම සුපුරුදු ආකාරයෙන් Magento 2 වෙත නිෂ්පාදන ආනයනය කිරීමේ ක්‍රියාවලිය විස්තර කළෙමි - ආකෘති සහ ගබඩා හරහා. සාමාන්‍ය ක්‍රමයේ දත්ත සැකසුම් වේගය ඉතා අඩුයි. මගේ ලැප්ටොප් එක තත්පරයකට එක නිෂ්පාදනයක් පමණ නිපදවමින් තිබුණා. මෙම අඛණ්ඩ පැවැත්මේ දී, සම්මත Magento 2 යාන්ත්‍රණයන් (මාදිලි, කර්මාන්තශාලා, ගබඩා) මගහැර, දත්ත ගබඩාවට සෘජුව ඇතුල් වීමෙන් - නිෂ්පාදනයක් ආනයනය කිරීමට විකල්ප ක්‍රමයක් මම සලකා බලමි. නිෂ්පාදන ආනයනය කිරීමේ පියවර අනුපිළිවෙල MySQL සමඟ වැඩ කළ හැකි ඕනෑම ක්‍රමලේඛන භාෂාවකට අනුවර්තනය කළ හැක.

වගකීමෙන් යුතුව ඔබ එවන: Magento සඳහා සූදානම් කළ ක්‍රියාකාරීත්වයක් ඇත දත්ත ආනයනය සහ, බොහෝ දුරට, එය ඔබට ප්රමාණවත් වනු ඇත. කෙසේ වෙතත්, ඔබ සතුව ඇති දේ සඳහා CSV ගොනුවක් සකස් කිරීමට පමණක් සීමා නොවී, ඔබට ආයාත ක්‍රියාවලියට වඩා සම්පූර්ණ පාලනයක් අවශ්‍ය නම්, cat වෙත සාදරයෙන් පිළිගනිමු.

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);
    }
}

ගුණාංග කේතය භාවිතා කරමින්, අපි එහි id සහ දත්ත වර්ගය තීරණය කරමු (datetime, decimal, int, text, varchar), පසුව පරිපාලන කවුළුව සඳහා දත්ත සුදුසු වගුවට ලියන්න (store_id = 0).

නිෂ්පාදනයට ඉහත ගුණාංග එකතු කිරීමෙන් පසු, ඔබට මෙම පින්තූරය පරිපාලක පැනලයේ ලැබේ:

Magento 2: නිෂ්පාදන සෘජුවම දත්ත ගබඩාවට ආනයනය කරන්න

ඉන්වෙන්ටරි දත්ත

Magento හි 2.3 අනුවාදයේ සිට, ඉන්වෙන්ටරි තොරතුරු ගබඩා කිරීම සපයන සමාන්තර වගු දෙකක් ඇත (නිෂ්පාදන ප්රමාණය):

  • cataloginventory_*: පැරණි ව්යුහය;
  • inventory_*: නව ව්යුහය (MSI - Multi Source Inventory);

ඔබ ව්‍යුහ දෙකටම ඉන්වෙන්ටරි දත්ත එක් කිරීමට අවශ්‍ය වේ, මන්ද නව ව්‍යුහය තවමත් පැරණි එකෙන් සම්පූර්ණයෙන්ම ස්වාධීන නැත (එය බොහෝ දුරට ඉඩ ඇත default නව ව්‍යුහයේ ගබඩාව මේසයක් සම්බන්ධ වේ cataloginventory_stock_status ලෙස inventory_stock_1).

නාමාවලිය_

Magneto 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).

එක "ගබඩාව"කිහිපයකට සම්බන්ධ කළ හැක"ප්‍රභවයන්ට"සහ එක් "ප්රභවය"- කීප දෙනෙකුට"ගබඩා"(බොහෝ-බොහෝ සබඳතා). ව්යතිරේක පෙරනිමි වේ"ප්රභවය"සහ"ගබඩාව". ඒවා වෙනත් ආයතනවලට නැවත සම්බන්ධ කර නැත (කේත මට්ටමේ සීමාව - දෝෂය "Default Source හෝ Default Stock සම්බන්ධ සබැඳිය සුරැකිය නොහැක") Magento 2 හි MSI ව්‍යුහය පිළිබඳ වැඩි විස්තර ලිපියෙන් සොයාගත හැකිය.CQRS සහ Event Sourcing භාවිතා කරන ගබඩා කළමනාකරණ පද්ධතිය. නිර්මාණ«.

මම පෙරනිමි වින්‍යාසය භාවිතා කර සියලු ඉන්වෙන්ටරි තොරතුරු මූලාශ්‍රයට එක් කරමි 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;
  • නිෂ්පාදන/ප්‍රවර්ග සඳහා URL නැවත උත්පාදනය කිරීම: ඔබට දිගුව භාවිතා කළ හැක "elgentos/regenerate-catalog-url«

අතිරේක ක්‍රියා සිදු කිරීමෙන් පසු පරිපාලක පැනලයේ නිෂ්පාදන:

Magento 2: නිෂ්පාදන සෘජුවම දත්ත ගබඩාවට ආනයනය කරන්න

සහ ඉදිරිපස:

Magento 2: නිෂ්පාදන සෘජුවම දත්ත ගබඩාවට ආනයනය කරන්න

සාරාංශය

පෙර ලිපියේ මෙන් එකම නිෂ්පාදන කට්ටලය (කෑලි 10) අවම වශයෙන් විශාලත්වයේ අනුපිළිවෙලකට වඩා වේගයෙන් ආනයනය කරනු ලැබේ (තත්පර 1 සහ 10). වේගය වඩාත් නිවැරදිව තක්සේරු කිරීම සඳහා, ඔබට නිෂ්පාදන විශාල සංඛ්යාවක් අවශ්ය වේ - සිය ගණනක් හෝ වඩා හොඳ දහස් ගණනක්. කෙසේ වෙතත්, එවැනි කුඩා ප්‍රමාණයේ ආදාන දත්ත සමඟ වුවද, අපට නිගමනය කළ හැක්කේ Magento (ආකෘති සහ ගබඩා) විසින් සපයනු ලබන මෙවලම් භාවිතය සැලකිය යුතු බව (මම අවධාරණය කරමි - බොහෝ!) අවශ්‍ය ක්‍රියාකාරිත්වය වර්ධනය කිරීම වේගවත් කරයි, නමුත් ඒ සමඟම සැලකිය යුතු ලෙස (මම අවධාරණය කරමි - බොහෝ!) දත්ත ගබඩාවට දත්ත ලැබෙන වේගය අඩු කරන්න.

එහි ප්රතිඵලයක් වශයෙන්, ජලය තෙත් වී ඇති අතර මෙය හෙළිදරව් කිරීමක් නොවේ. කෙසේ වෙතත්, දැන් මට සෙල්ලම් කිරීමට කේතය ඇති අතර සමහර විට තවත් රසවත් නිගමනවලට පැමිණේ.

මූලාශ්රය: www.habr.com