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 āĻ•ā§āĻ¯āĻžāĻŸāĻžāĻ˛āĻ—ā§‡āĻ° āĻŽā§‚āĻ˛ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨ āĻĒā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡ āĻŦāĻž āĻ¸āĻžāĻŽāĻ¨ā§‡āĻ° āĻĒā§ƒāĻˇā§āĻ āĻžāĻ¯āĻŧ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻ‡āĻĄāĻŋ = 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) āĻ†āĻŽāĻĻāĻžāĻ¨āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻ†āĻ°āĻ“ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ—āĻ¤āĻŋ āĻ…āĻ¨ā§āĻŽāĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŦā§ƒāĻšāĻ¤ā§āĻ¤āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻĒāĻŖā§āĻ¯ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ - āĻ•āĻ¯āĻŧā§‡āĻ•āĻļāĻ¤, āĻŦāĻž āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛ āĻāĻ–āĻ¨āĻ“ āĻšāĻžāĻœāĻžāĻ° āĻšāĻžāĻœāĻžāĻ°ā§ˇ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ‡āĻ¨āĻĒā§āĻŸ āĻĄā§‡āĻŸāĻžāĻ° āĻāĻ¤ āĻ›ā§‹āĻŸ āĻ†āĻ•āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡āĻ“, āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°ā§‡ āĻĒā§ŒāĻāĻ›āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§‡ Magento (āĻŽāĻĄā§‡āĻ˛ āĻāĻŦāĻ‚ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛) āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ¸āĻ°āĻžā§āĻœāĻžāĻŽāĻ—ā§āĻ˛āĻŋāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ (āĻ†āĻŽāĻŋ āĻœā§‹āĻ° āĻĻāĻŋāĻšā§āĻ›āĻŋ - āĻ…āĻ¨ā§‡āĻ•!) āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻŦāĻŋāĻ•āĻžāĻļā§‡āĻ° āĻ—āĻ¤āĻŋ āĻŦāĻžāĻĄāĻŧāĻžāĻ¨, āĻ¤āĻŦā§‡ āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯āĻ­āĻžāĻŦā§‡ (āĻ†āĻŽāĻŋ āĻœā§‹āĻ° āĻĻāĻŋāĻšā§āĻ›āĻŋ - āĻ…āĻ¨ā§‡āĻ•!) āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡ āĻĄāĻžāĻŸāĻž āĻ†āĻ¸āĻžāĻ° āĻ—āĻ¤āĻŋ āĻ•āĻŽāĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¨āĨ¤

āĻĢāĻ˛āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻœāĻ˛ āĻ­āĻŋāĻœā§‡ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻā§āĻ˜āĻžāĻŸāĻ¨ āĻ¨āĻ¯āĻŧ. āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ–ā§‡āĻ˛āĻ¤ā§‡ āĻ•ā§‹āĻĄ āĻ†āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻ°āĻ“ āĻ•āĻŋāĻ›ā§ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ā§‡ āĻ†āĻ¸āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤

āĻ‰āĻ¤ā§āĻ¸: www.habr.com