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_

рдореНрдпрд╛рдЧреНрдиреЗрдЯреЛ реи.рей рдбрд┐рдкреНрд▓реЛрдЗ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд╕рдБрдЧ рд╕реБрд░реБрдорд╛ реи рд╡рдЯрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рд╣рд░реВ рд╣реБрдиреНрдЫрдиреН 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);
}

inventory_

рдкреНрд░рд╛рд░рдореНрднрдорд╛, рдЗрдиреНрднреЗрдиреНрдЯрд░реА рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдирдпрд╛рдБ рд╕рдВрд░рдЪрдирд╛рдорд╛ 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 рдХреНрдпрд╛рдЯрд▓рдЧрдХреЛ рдореВрд▓ рд╣реЛ рд░ рдкреНрд░рд╢рд╛рд╕рдХ рдкреНрдпрд╛рдирд▓ рд╡рд╛ рдЕрдЧрд╛рдбрд┐ рдкреГрд╖реНрдардорд╛ рдЙрдкрд▓рдмреНрдз рдЫреИрдиред рдЖрдИрдбреА = 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-urls┬л

рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реЗрдкрдЫрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреНрдпрд╛рдирд▓рдорд╛ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ:

Magento 2: рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рд┐рдзреИ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ рдЖрдпрд╛рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд░ рдЕрдЧрд╛рдбрд┐:

Magento 2: рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рд┐рдзреИ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ рдЖрдпрд╛рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН

рд╕рд╛рд░рд╛рдВрд╢

рдЕрдШрд┐рд▓реНрд▓реЛ рд▓реЗрдЦрдорд╛ рдЬрд╕реНрддреИ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рдПрдЙрдЯреИ рд╕реЗрдЯ (резреж рдЯреБрдХреНрд░рд╛рд╣рд░реВ) рдХрдореНрддрд┐рдорд╛ рдкрдирд┐ рджреНрд░реБрдд рд░реВрдкрдорд╛ (рез рд╕реЗрдХреЗрдиреНрдб рдмрдирд╛рдо резреж) рдорд╛ рдЖрдпрд╛рдд рдЧрд░рд┐рдиреНрдЫред рдЧрддрд┐рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдЕрдиреБрдорд╛рди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЙрддреНрдкрд╛рджрдирд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫ - рдзреЗрд░реИ рд╕рдп, рд╡рд╛ рдЕрдЭ рд░рд╛рдореНрд░реЛ рдЕрдЭреИ рд╣рдЬрд╛рд░реМрдВред рдпрджреНрдпрдкрд┐, рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдХреЛ рдпрддрд┐ рд╕рд╛рдиреЛ рдЖрдХрд╛рд░рдХреЛ рд╕рд╛рде рдкрдирд┐, рд╣рд╛рдореА Magento (рдореЛрдбреЗрд▓ рд░ рднрдгреНрдбрд╛рд░рд╣рд░реВ) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рднрдиреНрдиреЗ рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛ рдкреБрдЧреНрди рд╕рдХреНрдЫреМрдВ (рдо рдЬреЛрдб рджрд┐рдиреНрдЫреБ - рдзреЗрд░реИ!) рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдХреЛ рд╡рд┐рдХрд╛рд╕рд▓рд╛рдИ рдЧрддрд┐ рджрд┐рдиреБрд╣реЛрд╕реН, рддрд░ рдПрдХреИ рд╕рдордпрдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░реВрдкрдорд╛ (рдо рдЬреЛрдб рджрд┐рдиреНрдЫреБ - рдзреЗрд░реИ!) рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рдЖрдЙрдиреЗ рдЧрддрд┐ рдШрдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред

рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдкрд╛рдиреА рднрд┐рдЬреЗрдХреЛ рднрдпреЛ рд░ рдпреЛ рдкреНрд░рдХрдЯреАрдХрд░рдг рд╣реЛрдЗрдиред рдЬреЗ рд╣реЛрд╕реН, рдЕрдм рдорд╕рдБрдЧ рдЦреЗрд▓реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХреЛрдб рдЫ рд░ рд╕рд╛рдпрдж рдХреЗрд╣реА рдердк рд░реЛрдЪрдХ рдирд┐рд╖реНрдХрд░реНрд╖рд╣рд░реВрдорд╛ рдЖрдЙрдБрдЫреБред

рд╕реНрд░реЛрдд: www.habr.com