Magento 2: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

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

Disclaimer: рдореИрдЧреЗрдВрдЯреЛ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдФрд░, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

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"
}

рдЖрдпрд╛рдд рдХреЗ рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди

  • рдЙрддреНрдкрд╛рдж рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рд╣реА
  • рдЙрддреНрдкрд╛рдж рдФрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз
  • рдмреБрдирд┐рдпрд╛рджреА рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (рдИрдПрд╡реА)
  • рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдбреЗрдЯрд╛ (рд╕реНрдЯреЙрдХ рдореЗрдВ рдЙрддреНрдкрд╛рдж рдХреА рдорд╛рддреНрд░рд╛)
  • рдореАрдбрд┐рдпрд╛ (рдЪрд┐рддреНрд░)
  • рдХреИрдЯрд▓реЙрдЧ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз

рдЙрддреНрдкрд╛рдж рдкрдВрдЬреАрдХрд░рдг

рдЙрддреНрдкрд╛рдж рдХреА рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ 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: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдореВрд▓ рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ

рдирдП рдкрдВрдЬреАрдХреГрдд рдЙрддреНрдкрд╛рдж рдХрд╛ рдЕрднреА рддрдХ рдХреЛрдИ рдирд╛рдо рдпрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдИрдПрд╡реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ. рдпрд╣рд╛рдВ рдмреБрдирд┐рдпрд╛рджреА рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдЙрддреНрдкрд╛рдж рдХреЛ рд╕рд╛рдордиреЗ рдХреА рдУрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ:

  • 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: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЗрдиреНрд╡реЗрдВрдЯрд░реА рдбреЗрдЯрд╛

рдореИрдЧреЗрдВрдЯреЛ рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 2.3 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рджреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╕реЗрдЯ рд╣реИрдВ рдЬреЛ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдЬрд╛рдирдХрд╛рд░реА (рдЙрддреНрдкрд╛рдж рдорд╛рддреНрд░рд╛) рдХрд╛ рднрдВрдбрд╛рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:

  • cataloginventory_*: рдкреБрд░рд╛рдиреА рд╕рдВрд░рдЪрдирд╛;
  • inventory_*: рдирдИ рд╕рдВрд░рдЪрдирд╛ (рдПрдордПрд╕рдЖрдИ - рдорд▓реНрдЯреА рд╕реЛрд░реНрд╕ рдЗрдиреНрд╡реЗрдВрдЯрд░реА);

рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирдИ рд╕рдВрд░рдЪрдирд╛ рдЕрднреА рддрдХ рдкреБрд░рд╛рдиреА рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реНрд╡рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИ (рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐)ред default рдирдИ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЧреЛрджрд╛рдо рдореЗрдВ рдПрдХ рдЯреЗрдмрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ cataloginventory_stock_status рдЬреИрд╕рд╛ inventory_stock_1).

рдХреИрдЯрд▓реЙрдЧ рд╕реВрдЪреА_

рдореИрдЧреНрдиреЗрдЯреЛ 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 рдПрдордПрд╕рдЖрдИ (рдирдИ рд╕рдВрд░рдЪрдирд╛) рдореЗрдВ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ cataloginventory_stock.

рдкреБрд░рд╛рдиреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрдиреНрд╡реЗрдВрдЯрд░реА рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • cataloginventory_stock_item
  • cataloginventory_stock_status

рдХреИрдЯрд▓реЙрдЧрдЗрдиреНрд╡реЗрдВрдЯрд░реА_рд╕реНрдЯреЙрдХ_рдЖрдЗрдЯрдо

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

рдХреИрдЯрд▓реЙрдЧрдЗрдиреНрд╡реЗрдВрдЯрд░реА_рд╕реНрдЯреЙрдХ_рд╕реНрдЯреЗрдЯрд╕

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 рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ "рд╕реАрдХреНрдпреВрдЖрд░рдПрд╕ рдФрд░ рдЗрд╡реЗрдВрдЯ рд╕реЛрд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реАред рдбрд┐рдЬрд╝рд╛рдЗрди"ред

рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕рднреА рдЗрдиреНрд╡реЗрдВрдЯреНрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реНрд░реЛрдд рдореЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛ 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);
}

рдХреИрдЯрд▓реЙрдЧ_рдкреНрд░реЛрдбрдХреНрдЯ_рдПрдВрдЯрд┐рдЯреА_рд╡рд░реНрдХрд░

рдПрдХ рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛрдб рдХреЛрд╖реНрдардХ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ):

  • рдЖрдзрд╛рд░(image)
  • рдЫреЛрдЯреА рдЫрд╡рд┐ (small_image)
  • рдердВрдмрдиреЗрд▓ (thumbnail)
  • рдирдореВрдирд╛ рдЫрд╡рд┐ (swatch_image)

рдХрд┐рд╕реА рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ catalog_product_entity_varchar. рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛрдб " рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИрдореВрд▓ рдЙрддреНрдкрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ"ред

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдПрдХ рдЫрд╡рд┐ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

Magento 2: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ

рд╢реНрд░реЗрдгреА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбреЗрдЯрд╛ рд╡рд╛рд▓реА рдореБрдЦреНрдп рддрд╛рд▓рд┐рдХрд╛рдПрдБ:

  • catalog_category_entity: рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рд░рдЬрд┐рд╕реНрдЯрд░;
  • catalog_category_product: рдЙрддреНрдкрд╛рджреЛрдВ рдФрд░ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз;
  • catalog_category_entity_*: рдИрдПрд╡реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди;

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдПрдХ рдЦрд╛рд▓реА рдореИрдЧреЗрдВрдЯреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рд╢реНрд░реЗрдгреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ 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|

рдЖрдИрдбреА=1 рд╡рд╛рд▓реА рд╢реНрд░реЗрдгреА рд╕рдВрдкреВрд░реНрдг рдореИрдЧреЗрдВрдЯреЛ рдХреИрдЯрд▓реЙрдЧ рдХрд╛ рдореВрд▓ рд╣реИ рдФрд░ рдпрд╣ рди рддреЛ рдПрдбрдорд┐рди рдкреИрдирд▓ рдореЗрдВ рдФрд░ рди рд╣реА рдлреНрд░рдВрдЯ рдкреЗрдЬ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдИрдбреА=2 рд╡рд╛рд▓реА рд╢реНрд░реЗрдгреА (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢реНрд░реЗрдгреА) рдореБрдЦреНрдп рд╕рд╛рдЗрдЯ рдХреЗ рдореБрдЦреНрдп рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╢реНрд░реЗрдгреА рд╣реИ (рдореБрдЦреНрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реНрдЯреЛрд░) рддрдм рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ)ред рдПрдбрдорд┐рди/рд╕реНрдЯреЛрд░/рд╕рднреА рд╕реНрдЯреЛрд░). рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯреЛрд░ рдХреА рдореВрд▓ рд╢реНрд░реЗрдгреА рднреА рд╕рд╛рдордиреЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЙрд╕рдХреА рдЙрдкрд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдЪреВрдБрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рдЕрднреА рднреА рдЙрддреНрдкрд╛рджреЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рд╣реИ, рдореИрдВ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдмрдирд╛рддреЗ рд╕рдордп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░рд╡реЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдмрд▓реНрдХрд┐ рдореИрдЧреЗрдВрдЯреЛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХрдХреНрд╖рд╛рдУрдВ (рдореЙрдбрд▓ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реАрдзреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЖрдпрд╛рддрд┐рдд рдЙрддреНрдкрд╛рдж рдХреЛ рдХрд┐рд╕реА рд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╢реНрд░реЗрдгреА рдХрд╛ рдЙрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдорд┐рд▓рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реНрд░реЗрдгреА рдЖрдИрдбреА рдорд┐рд▓рд╛рди рдХреЗ рджреМрд░рд╛рди рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ):

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: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп

рдПрдХ рдмрд╛рд░ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдг рдкреВрд░реЗ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рдЙрддреНрдкрд╛рдж:

Magento 2: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдФрд░ рд╕рд╛рдордиреЗ:

Magento 2: рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ

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

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

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

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