Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

ะ’ เจชเจฟเจ›เจฒเฉ‡ เจฒเฉ‡เจ– เจฎเฉˆเจ‚ เจ†เจฎ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ Magento 2 เจตเจฟเฉฑเจš เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจฏเจพเจค เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฆเจพ เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจนเฉˆ - เจฎเจพเจกเจฒเจพเจ‚ เจ…เจคเฉ‡ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจฐเจพเจนเฉ€เจ‚. เจ†เจฎ เจตเจฟเจงเฉ€ เจตเจฟเฉฑเจš เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจกเจพเจŸเจพ เจชเฉเจฐเฉ‹เจธเฉˆเจธเจฟเฉฐเจ— เจธเจชเฉ€เจก เจนเฉเฉฐเจฆเฉ€ เจนเฉˆเฅค เจฎเฉ‡เจฐเจพ เจฒเฉˆเจชเจŸเจพเจช เจชเฉเจฐเจคเฉ€ เจธเจ•เจฟเฉฐเจŸ เจฒเจ—เจญเจ— เจ‡เฉฑเจ• เจ‰เจคเจชเจพเจฆ เจชเฉˆเจฆเจพ เจ•เจฐ เจฐเจฟเจนเจพ เจธเฉ€เฅค เจ‡เจธ เจจเจฟเจฐเฉฐเจคเจฐเจคเจพ เจตเจฟเฉฑเจš, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจ‰เจคเจชเจพเจฆ เจจเฉ‚เฉฐ เจ†เจฏเจพเจค เจ•เจฐเจจ เจฆเฉ‡ เจ‡เฉฑเจ• เจตเจฟเจ•เจฒเจชเจ• เจคเจฐเฉ€เจ•เฉ‡ 'เจคเฉ‡ เจตเจฟเจšเจพเจฐ เจ•เจฐเจฆเจพ เจนเจพเจ‚ - เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจฟเฉฑเจงเฉ‡ เจชเฉเจฐเจตเฉ‡เจธเจผ เจฆเฉเจ†เจฐเจพ, เจฎเจฟเจ†เจฐเฉ€ Magento 2 เจตเจฟเจงเฉ€เจ†เจ‚ (เจฎเจพเจกเจฒ, เจซเฉˆเจ•เจŸเจฐเฉ€เจ†เจ‚, เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚) เจจเฉ‚เฉฐ เจฌเจพเจˆเจชเจพเจธ เจ•เจฐเจ•เฉ‡. เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจ†เจฏเจพเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฆเจฎเจพเจ‚ เจฆเฉ‡ เจ•เฉเจฐเจฎ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเฉเจฐเฉ‹เจ—เฉเจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพ เจฒเจˆ เจ…เจจเฉเจ•เฉ‚เจฒเจฟเจค เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจœเฉ‹ MySQL เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค

เจฌเฉ‡เจฆเจพเจ…เจตเจพ: Magento เจฒเจˆ เจคเจฟเจ†เจฐ-เจ•เฉ€เจคเฉ€ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจนเฉˆ เจกเจพเจŸเจพ เจ†เจฏเจพเจค เจ…เจคเฉ‡, เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉˆ, เจ‡เจน เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจ•เจพเจซเฉ€ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ†เจฏเจพเจค เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† 'เจคเฉ‡ เจตเจงเฉ‡เจฐเฉ‡ เจธเฉฐเจชเฉ‚เจฐเจจ เจจเจฟเจฏเฉฐเจคเจฐเจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ, เจœเฉ‹ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉˆ เจ‰เจธ เจฒเจˆ เจ‡เฉฑเจ• CSV เจซเจพเจˆเจฒ เจคเจฟเจ†เจฐ เจ•เจฐเจจ เจคเฉฑเจ• เจธเฉ€เจฎเจฟเจค เจจเจนเฉ€เจ‚, เจฌเจฟเฉฑเจฒเฉ€ เจตเจฟเฉฑเจš เจคเฉเจนเจพเจกเจพ เจธเจตเจพเจ—เจค เจนเฉˆเฅค

Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจฆเฉ‹เจจเฉ‹ เจฒเฉ‡เจ– เจฒเจฟเจ–เจฃ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจ•เฉ‹เจก เจจเฉ‚เฉฐ Magento เจฎเฉ‹เจกเฉ€เจŠเจฒ เจตเจฟเฉฑเจš เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ "flancer32/mage2_ext_demo_import". เจ‡เฉฑเจฅเฉ‡ เจ•เฉเจ เจชเจพเจฌเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ€ เจฎเฉˆเจ‚ เจกเฉˆเจฎเฉ‹ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจชเจพเจฒเจฃเจพ เจ•เฉ€เจคเฉ€ เจนเฉˆ:

  • เจ‰เจคเจชเจพเจฆ เจธเจฟเจฐเจซเจผ เจฌเจฃเจพเจ เจ—เจ เจนเจจ, เจ…เฉฑเจชเจกเฉ‡เจŸ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค
  • เจ‡เฉฑเจ• เจ—เฉ‹เจฆเจพเจฎ
  • เจธเจฟเจฐเจซเจผ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจฆเฉ‡ เจจเจพเจฎ เจนเฉ€ เจ†เจฏเจพเจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจฌเจฃเจคเจฐ เจคเฉ‹เจ‚ เจฌเจฟเจจเจพเจ‚
  • เจกเจพเจŸเจพ เจฌเจฃเจคเจฐ เจธเฉฐเจธเจ•เจฐเจฃ 2.3 เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเจฆเฉ‡ เจนเจจ

เจ‡เฉฑเจ• เจ‰เจคเจชเจพเจฆ เจ†เจฏเจพเจค เจ•เจฐเจจ เจฒเจˆ JSON:

{
  "sku": "MVA20D-UBV-3",
  "name": "ะ—ะฐะณะปัƒัˆะบะฐ ะดะปั ะฟะปะพะผะฑะธั€ะพะฒะบะธ ะ’ะ47-29 IEK",
  "desc": "ะžะฑะตัะฟะตั‡ะตะฝะธะต ะดะพัั‚ัƒะฟะฐ ะบ ัƒัั‚ั€ะพะนัั‚ะฒะฐะผ ...",
  "desc_short": "ะ—ะฐะณะปัƒัˆะบะฐ ะดะปั ะฟะปะพะผะฑะธั€ะพะฒะบะธ ะ’ะ47-29 IEK ะฟั€ะตะดะฝะฐะทะฝะฐั‡ะตะฝะฐ ะดะปั ...",
  "price": 5.00,
  "qty": 25,
  "categories": ["ะšะฐั‚ะตะณะพั€ะธั 1", "ะšะฐั‚ะตะณะพั€ะธั 2"],
  "image_path": "mva20d_ubv_3.png"
}

เจ†เจฏเจพเจค เจฆเฉ‡ เจฎเฉเฉฑเจ– เจชเฉœเจพเจตเจพเจ‚ เจฆเฉ€ เจธเฉฐเจ–เฉ‡เจช เจœเจพเจฃเจ•เจพเจฐเฉ€

  • เจ‰เจคเจชเจพเจฆ เจ†เจชเจฃเฉ‡ เจ†เจช เจฆเฉ€ เจฐเจœเจฟเจธเจŸเจฐเฉ‡เจธเจผเจจ
  • เจ‰เจคเจชเจพเจฆ เจ…เจคเฉ‡ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจตเจฟเจšเจ•เจพเจฐ เจ•เจจเฉˆเจ•เจธเจผเจจ
  • เจฎเฉ‚เจฒ เจ‰เจคเจชเจพเจฆ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ (EAV)
  • เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ (เจธเจŸเจพเจ• เจตเจฟเฉฑเจš เจ‰เจคเจชเจพเจฆ เจฆเฉ€ เจฎเจพเจคเจฐเจพ)
  • เจฎเฉ€เจกเฉ€เจ† (เจคเจธเจตเฉ€เจฐเจพเจ‚)
  • เจ•เฉˆเจŸเจพเจฒเจพเจ— เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจจเจพเจฒ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ

เจ‰เจคเจชเจพเจฆ เจฐเจœเจฟเจธเจŸเฉเจฐเฉ‡เจธเจผเจจ

เจตเจฟเฉฑเจš เจฎเฉ‚เจฒ เจ‰เจคเจชเจพเจฆ เจฆเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฎเจฟเจฒ เจธเจ•เจฆเฉ€ เจนเฉˆ catalog_product_entity:

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

เจ‰เจคเจชเจพเจฆ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจเจ‚เจŸเจฐเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจนเฉˆ:

  • attribute_set_id
  • sku

เจตเจพเจงเฉ‚:

  • type_id - เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจคเจพเจ‚ 'เจธเจงเจพเจฐเจจ' เจตเจฐเจคเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ

เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเจพ เจฒเจฟเจ–เจฃ เจฒเจˆ, เจฎเฉˆเจ‚ Magento เจฆเฉ‡ DB เจ…เจกเจพเจชเจŸเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเจพ เจนเจพเจ‚:

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

เจจเจพเจฒ เจ‰เจคเจชเจพเจฆ เจจเฉ‚เฉฐ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ catalog_product_entity เจ‡เจน เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจตเจฟเฉฑเจš, เจ‰เจคเจชเจพเจฆ เจ—เจฐเจฟเฉฑเจก เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ (เจ•เฉˆเจŸเจพเจฒเจพเจ—/เจ‰เจคเจชเจพเจฆ).

Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจ‰เจคเจชเจพเจฆ เจ…เจคเฉ‡ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจตเจฟเจšเจ•เจพเจฐ เจธเจฌเฉฐเจง

เจธเจพเจˆเจŸ เจฆเฉ‡ เจจเจพเจฒ เจ‰เจคเจชเจพเจฆ เจฆเจพ เจธเจฌเฉฐเจง เจ‡เจน เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‰เจคเจชเจพเจฆ เจ…เฉฑเจ—เฉ‡ เจ•เจฟเจธ เจธเจŸเฉ‹เจฐ เจ…เจคเฉ‡ เจกเจฟเจธเจชเจฒเฉ‡ เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

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

Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจฎเฉ‚เจฒ เจ‰เจคเจชเจพเจฆ เจ—เฉเจฃ

เจจเจตเฉ‡เจ‚ เจฐเจœเจฟเจธเจŸเจฐเจก เจ‰เจคเจชเจพเจฆ เจฆเจพ เจ…เจœเฉ‡ เจ•เฉ‹เจˆ เจจเจพเจฎ เจœเจพเจ‚ เจตเฉ‡เจฐเจตเจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจฐเจพเจนเฉ€เจ‚ เจ‡เจน เจธเจญ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ EAV เจ—เฉเจฃ. เจ‡เฉฑเจฅเฉ‡ เจฎเฉ‚เจฒ เจ‰เจคเจชเจพเจฆ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจนเฉˆ เจœเฉ‹ เจ‰เจคเจชเจพเจฆ เจจเฉ‚เฉฐ เจธเจพเจนเจฎเจฃเฉ‡ 'เจคเฉ‡ เจธเจนเฉ€ เจขเฉฐเจ— เจจเจพเจฒ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจนเจจ:

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

เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเฉ‡ เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจ‡เจธเจฆเฉ‡ เจ•เฉ‹เจก เจคเฉ‹เจ‚ เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจ…เจคเฉ‡ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฆเฉ€ เจ•เจฟเจธเจฎ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ‡ เจตเฉ‡เจฐเจตเฉ‡ เจ›เฉฑเจก เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจนเจจ):

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

เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจ•เฉ‹เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เจธเจฆเฉ€ เจ†เจˆเจกเฉ€ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจ•เจฟเจธเจฎ (datetime, decimal, int, text, varchar), เจซเจฟเจฐ เจชเฉเจฐเจฌเฉฐเจงเจ•เฉ€ เจตเจฟเฉฐเจกเฉ‹ เจฒเจˆ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ‰เจšเจฟเจค เจธเจพเจฐเจฃเฉ€ เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‹ (store_id = 0).

เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจ‰เจชเจฐเฉ‹เจ•เจค เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจ‡เจน เจคเจธเจตเฉ€เจฐ เจฎเจฟเจฒเจฆเฉ€ เจนเฉˆ:

Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€

Magento เจตเจฟเฉฑเจš เจตเจฐเจœเจจ 2.3 เจคเฉ‹เจ‚ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจŸเฉ‡เจฌเจฒเจพเจ‚ เจฆเฉ‡ เจฆเฉ‹ เจธเจฎเจพเจจเจพเจ‚เจคเจฐ เจธเฉˆเฉฑเจŸ เจนเจจ เจœเฉ‹ เจตเจธเจคเฉ‚ เจœเจพเจฃเจ•เจพเจฐเฉ€ (เจ‰เจคเจชเจพเจฆ เจฆเฉ€ เจฎเจพเจคเจฐเจพ) เจฆเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจ:

  • cataloginventory_*: เจชเฉเจฐเจพเจฃเฉ€ เจฌเจฃเจคเจฐ;
  • inventory_*: เจจเจตเฉ€เจ‚ เจฌเจฃเจคเจฐ (MSI - เจฎเจฒเจŸเฉ€ เจธเฉ‹เจฐเจธ เจ‡เจจเจตเฉˆเจ‚เจŸเจฐเฉ€);

เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉ‹เจตเจพเจ‚ เจฌเจฃเจคเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจจเจตเฉ€เจ‚ เจฌเจฃเจคเจฐ เจ…เจœเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจคเฉ‹เจ‚ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจธเฉเจคเฉฐเจคเจฐ เจจเจนเฉ€เจ‚ เจนเฉˆ (เจ‡เจน เจฌเจนเฉเจค เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉˆ เจ•เจฟ เจ‡เจธ เจฒเจˆ default เจจเจตเฉ€เจ‚ เจฌเจฃเจคเจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉ‡เจฌเจฒ เจธเจผเจพเจฎเจฒ เจนเฉˆ cataloginventory_stock_status เจฆเฉ‡ เจคเฉŒเจฐ เจคเฉ‡ inventory_stock_1).

cataloginventory_

เจฎเฉˆเจ—เจจเฉ‡เจŸเฉ‹ 2.3 เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš 2 เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ store_website, เจœเฉ‹ เจ•เจฟ เจฆเฉ‹ เจธเจพเจˆเจŸเจพเจ‚ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ - เจชเฉเจฐเจฌเฉฐเจงเจ•เฉ€ เจ…เจคเฉ‡ เจฎเฉเฉฑเจ– เจ•เจฒเจพเจ‡เฉฐเจŸ:

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

เจŸเฉ‡เจฌเจฒ cataloginventory_stock เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจเจ‚เจŸเจฐเฉ€ เจนเฉˆ:

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

เจญเจพเจต, เจธเจพเจกเฉ‡ เจชเฉเจฐเจพเจฃเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ เจ‡เฉฑเจ• "เจ—เฉเจฆเจพเจฎ" เจนเฉˆ (stock) เจ…เจคเฉ‡ เจ‡เจน เจชเฉเจฐเจฌเฉฐเจงเจ•เฉ€ เจตเฉˆเจฌเจธเจพเจˆเจŸ เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจฐเจพเจนเฉ€เจ‚ เจจเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจœเจพ เจฐเจนเฉ‡ เจนเจจ sources/stocks MSI (เจจเจตเฉ€เจ‚ เจฌเจฃเจคเจฐ) เจตเจฟเฉฑเจš เจจเจตเฉ€เจ†เจ‚ เจเจ‚เจŸเจฐเฉ€เจ†เจ‚ เจจเจนเฉ€เจ‚ เจนเฉเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ cataloginventory_stock.

เจชเฉเจฐเจพเจฃเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจตเจฟเฉฑเจš เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฌเจพเจฐเฉ‡ เจตเจธเจคเฉ‚ เจกเฉ‡เจŸเจพ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจฆเจฐเจœ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

  • cataloginventory_stock_item
  • cataloginventory_stock_status

cataloginventory_stock_item

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

cataloginventory_stock_status

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

เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€_

เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš, เจตเจธเจคเฉ‚เจ†เจ‚ เจฆเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจ เจฒเจˆ เจจเจตเฉ€เจ‚ เจฌเจฃเจคเจฐ เจตเจฟเฉฑเจš 1 "เจธเจฐเฉ‹เจค"(inventory_source):

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

เจ…เจคเฉ‡ เจ‡เฉฑเจ• "เจ—เฉเจฆเจพเจฎ"(inventory_stock):

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

ยซเจธเจฐเฉ‹เจคยป เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฒเจˆ เจญเฉŒเจคเจฟเจ• เจธเจŸเฉ‹เจฐเฉ‡เจœ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ (เจฐเจฟเจ•เจพเจฐเจก เจตเจฟเฉฑเจš เจญเฉŒเจคเจฟเจ• เจ•เฉ‹เจ†เจฐเจกเฉ€เจจเฉ‡เจŸ เจ…เจคเฉ‡ เจกเจพเจ• เจชเจคเจพ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆ)เฅค "เจ—เฉเจฆเจพเจฎ"เจ•เจˆ "เจธเจฐเฉ‹เจคเจพเจ‚" เจฆเจพ เจ‡เฉฑเจ• เจฒเจพเจœเจผเฉ€เจ•เจฒ เจฏเฉ‚เจจเฉ€เจ…เจจ เจนเฉˆ (inventory_source_stock_link)

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

เจœเจฟเจธ เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจตเจฟเจ•เจฐเฉ€ เจšเฉˆเจจเจฒ เจจเจพเจฒ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ เจนเฉเฉฐเจฆเจพ เจนเฉˆ (inventory_stock_sales_channel)

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

เจกเฉ‡เจŸเจพ เจขเจพเจ‚เจšเฉ‡ เจฆเฉเจ†เจฐเจพ เจจเจฟเจฐเจฃเจพ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจตเฉฑเจ–-เจตเฉฑเจ– เจ•เจฟเจธเจฎเจพเจ‚ เจฆเฉ‡ เจตเจฟเจ•เจฐเฉ€ เจšเฉˆเจจเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฎเฉฐเจจเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเจฟเจฐเจซ เจ•เฉเจจเฉˆเจ•เจธเจผเจจ "เจธเจŸเจพเจ•"-"เจตเฉˆเจฌเจธเจพเจˆเจŸ"(เจตเฉ‡เจฌเจธเจพเจˆเจŸ เจฆเจพ เจฒเจฟเฉฐเจ• เจตเฉˆเจฌเจธเจพเจˆเจŸ เจ•เฉ‹เจก เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเจฆเจพ เจนเฉˆ - base).

เจ‡เฉฑเจ• "เจ—เฉเจฆเจพเจฎ"เจ•เจˆเจ†เจ‚ เจจเจพเจฒ เจฒเจฟเฉฐเจ• เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ"เจธเจฐเฉ‹เจค เจจเฉ‚เฉฐ"เจ…เจคเฉ‡ เจ‡เฉฑเจ•"เจธเจฐเฉ‹เจค"-เจ•เจˆ เจคเฉฑเจ•"เจ—เฉ‹เจฆเจพเจฎ"(เจฌเจนเฉเจค-เจคเฉ‹เจ‚-เจ•เจˆ เจฐเจฟเจธเจผเจคเฉ‡) เจ…เจชเจตเจพเจฆ เจฎเฉ‚เจฒ เจนเจจ"เจธเจฐเฉ‹เจค"เจ…เจคเฉ‡"เจ—เฉเจฆเจพเจฎ". เจ‰เจน เจฆเฉ‚เจœเฉ€เจ†เจ‚ เจธเฉฐเจธเจฅเจพเจตเจพเจ‚ เจจเจพเจฒ เจฎเฉเฉœ-เจฒเจฟเฉฐเจ• เจจเจนเฉ€เจ‚ เจนเจจ (เจ•เฉ‹เจก เจชเฉฑเจงเจฐ 'เจคเฉ‡ เจธเฉ€เจฎเจพ - เจ—เจฒเจคเฉ€ "เจกเจฟเจซเจพเจฒเจŸ เจธเจฐเฉ‹เจค เจœเจพเจ‚ เจกเจฟเจซเจพเจฒเจŸ เจธเจŸเจพเจ• เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ"). Magento 2 เจตเจฟเฉฑเจš MSI เจขเจพเจ‚เจšเฉ‡ เจฌเจพเจฐเฉ‡ เจนเฉ‹เจฐ เจตเฉ‡เจฐเจตเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจฒเฉฑเจญเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจ โ€œCQRS เจ…เจคเฉ‡ เจ‡เจตเฉˆเจ‚เจŸ เจธเฉ‹เจฐเจธเจฟเฉฐเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจชเฉเจฐเจฌเฉฐเจงเจจ เจธเจฟเจธเจŸเจฎเฅค เจกเจฟเจœเจผเจพเจˆเจจ".

เจฎเฉˆเจ‚ เจกเจฟเจซเฉŒเจฒเจŸ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐเฉ‡เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ เจ…เจคเฉ‡ เจธเจฐเฉ‹เจค เจตเจฟเฉฑเจš เจธเจพเจฐเฉ€ เจตเจธเจคเฉ‚ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจธเจผเจพเจฎเจฒ เจ•เจฐเจพเจ‚เจ—เจพ default, เจœเฉ‹ เจ•เจฟ เจ•เฉ‹เจก เจฆเฉ‡ เจจเจพเจฒ เจตเฉˆเจฌเจธเจพเจˆเจŸ เจจเจพเจฒ เจœเฉเฉœเฉ‡ เจตเจฟเจ•เจฐเฉ€ เจšเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจธเจผเจพเจฎเจฒ เจนเฉˆ base (เจธเจŸเฉ‹เจฐ เจฆเฉ‡ เจ…เจ—เจฒเฉ‡ เจธเจฟเจฐเฉ‡ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ - เจตเฉ‡เจ–เฉ‹ store_website):

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

เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจตเจธเจคเฉ‚ เจธเฉ‚เจšเฉ€ เจœเฉ‹เฉœเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจคเจธเจตเฉ€เจฐ เจฎเจฟเจฒเจฆเฉ€ เจนเฉˆ:

Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจฎเฉ€เจกเฉ€เจ†

เจœเจฆเฉ‹เจ‚ เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจฆเฉเจ†เจฐเจพ เจ•เจฟเจธเฉ‡ เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ "เจนเฉฑเจฅเฉ€เจ‚" เจœเฉ‹เฉœเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจŸเฉ‡เจฌเจฒ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ:

  • catalog_product_entity_media_gallery: เจฎเฉ€เจกเฉ€เจ† เจฐเจœเจฟเจธเจŸเจฐเฉ€ (เจšเจฟเฉฑเจคเจฐเจพเจ‚ เจ…เจคเฉ‡ เจตเฉ€เจกเฉ€เจ“ เจซเจพเจˆเจฒเจพเจ‚);
  • catalog_product_entity_media_gallery_value: เจฎเฉ€เจกเฉ€เจ† เจจเฉ‚เฉฐ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจ…เจคเฉ‡ เจชเฉเจฐเจฆเจฐเจธเจผเจจเจพเจ‚ เจจเจพเจฒ เจœเฉ‹เฉœเจจเจพ (เจธเจฅเจพเจจเฉ€เจ•เจฐเจจ);
  • catalog_product_entity_media_gallery_value_to_entity: เจฎเฉ€เจกเฉ€เจ† เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเจพเจฒ เจœเฉ‹เฉœเจจเจพ (เจธเฉฐเจญเจพเจตเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจ‰เจคเจชเจพเจฆ เจฒเจˆ เจกเจฟเจซเฉŒเจฒเจŸ เจฎเฉ€เจกเฉ€เจ† เจธเจฎเฉฑเจ—เจฐเฉ€);
  • catalog_product_entity_varchar: เจฐเฉ‹เจฒ เจœเจฟเจธ เจตเจฟเฉฑเจš เจšเจฟเฉฑเจคเจฐ เจตเจฐเจคเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจ‡เฉฑเจฅเฉ‡ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ;

เจ…เจคเฉ‡ เจšเจฟเฉฑเจคเจฐ เจ–เฉเจฆ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ€เจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ ./pub/media/catalog/product/x/y/เจ•เจฟเฉฑเจฅเฉ‡ x ะธ y โ€” เจšเจฟเฉฑเจคเจฐ เจซเจพเจ‡เจฒ เจจเจพเจ‚ เจฆเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจ…เจคเฉ‡ เจฆเฉ‚เจœเฉ‡ เจ…เฉฑเจ–เจฐเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจซเจพเจˆเจฒ image.png เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเฉฐเจญเจพเจฒเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ ./pub/media/catalog/product/i/m/image.png, เจคเจพเจ‚ เจ•เจฟ เจ•เฉˆเจŸเจพเจฒเจพเจ— เจคเฉ‹เจ‚ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจตเจœเฉ‹เจ‚ เจตเจฐเจค เจธเจ•เฉ‡เฅค

เจตเจฟเจš เจคเจพเจ‡เจจเจพเจค เจฐเจœเจฟเจธเจŸเจฐ ./pub/media/catalog/product/ เจฎเฉ€เจกเฉ€เจ† เจซเจพเจˆเจฒ (เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจซเจพเจˆเจฒ เจฐเฉฑเจ–เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจฌเจพเจฐเฉ‡ เจšเจฐเจšเจพ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ):

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

เจฐเจœเจฟเจธเจŸเจฐ เจนเฉ‹เจฃ 'เจคเฉ‡, เจ‡เฉฑเจ• เจจเจตเฉ€เจ‚ เจฎเฉ€เจกเฉ€เจ† เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจชเจ›เจพเจฃเจ•เจฐเจคเจพ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจธเจŸเฉ‹เจฐเจซเจฐเฉฐเจŸ เจฒเจˆ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ‰เจคเจชเจพเจฆ เจจเจพเจฒ เจฐเจœเจฟเจธเจŸเจฐเจก เจฎเฉ€เจกเฉ€เจ† เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚:

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

เจ…เจธเฉ€เจ‚ เจฐเจœเจฟเจธเจŸเจฐเจก เจฎเฉ€เจกเฉ€เจ† เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจŸเฉ‹เจฐเจซเจฐเฉฐเจŸ เจจเจพเจฒ เจฌเฉฐเจจเฉเจนเฉ‡ เจฌเจฟเจจเจพเจ‚ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ‰เจคเจชเจพเจฆ เจจเจพเจฒ เจœเฉ‹เฉœเจฆเฉ‡ เจนเจพเจ‚เฅค เจ‡เจน เจธเจชเฉฑเจธเจผเจŸ เจจเจนเฉ€เจ‚ เจนเฉˆ เจ•เจฟ เจ‡เจน เจกเฉ‡เจŸเจพ เจ•เจฟเฉฑเจฅเฉ‡ เจตเจฐเจคเจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจชเจฟเจ›เจฒเฉ€ เจธเจพเจฐเจฃเฉ€ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจคเฉฑเจ• เจชเจนเฉเฉฐเจšเจฃเจพ เจ…เจธเฉฐเจญเจต เจ•เจฟเจ‰เจ‚ เจนเฉˆ, เจชเจฐ เจ‡เจน เจธเจพเจฐเจฃเฉ€ เจฎเฉŒเจœเฉ‚เจฆ เจนเฉˆ เจ…เจคเฉ‡ เจœเจฆเฉ‹เจ‚ เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจคเจธเจตเฉ€เจฐ เจœเฉ‹เฉœเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ เจคเจพเจ‚ เจกเฉ‡เจŸเจพ เจ‡เจธ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ เจ‡เจน เจนเฉˆเฅค

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

catalog_product_entity_varchar

เจ‡เฉฑเจ• เจฎเฉ€เจกเฉ€เจ† เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจตเฉฑเจ–-เจตเฉฑเจ– เจญเฉ‚เจฎเจฟเจ•เจพเจตเจพเจ‚ เจจเจพเจฒ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ (เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ—เฉเจฃ เจ•เฉ‹เจก เจฌเจฐเฉˆเจ•เจŸเจพเจ‚ เจตเจฟเฉฑเจš เจฆเจฐเจธเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ):

  • เจ…เจงเจพเจฐ (image)
  • เจ›เฉ‹เจŸเจพ เจšเจฟเฉฑเจคเจฐ (small_image)
  • เจฅเฉฐเจฌเจจเฉ‡เจฒ(thumbnail)
  • เจธเจตเฉˆเจš เจšเจฟเฉฑเจคเจฐ (swatch_image)

เจ‡เฉฑเจ• เจฎเฉ€เจกเฉ€เจ† เจซเจพเจˆเจฒ เจจเจพเจฒ เจญเฉ‚เจฎเจฟเจ•เจพเจตเจพเจ‚ เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจเจพ เจฌเจฟเจฒเจ•เฉเจฒ เจ‰เจนเฉ€ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เจธ เจตเจฟเฉฑเจš เจนเฉเฉฐเจฆเจพ เจนเฉˆ catalog_product_entity_varchar. เจฌเจพเจˆเจกเจฟเฉฐเจ— เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉˆ "เจฎเฉ‚เจฒ เจ‰เจคเจชเจพเจฆ เจ—เฉเจฃ".

เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจ‰เจคเจชเจพเจฆ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจšเจฟเฉฑเจคเจฐ เจœเฉ‹เฉœเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‡เจน เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

Magento 2: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจตเจฐเจ—

เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจ…เจจเฉเจธเจพเจฐ เจกเจพเจŸเจพ เจฐเฉฑเจ–เจฃ เจตเจพเจฒเฉ€ เจฎเฉเฉฑเจ– เจธเจพเจฐเจฃเฉ€เจ†เจ‚:

  • catalog_category_entity: เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจฆเจพ เจฐเจœเจฟเจธเจŸเจฐ;
  • catalog_category_product: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจ…เจคเฉ‡ เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจตเจฟเจšเจ•เจพเจฐ เจธเจฌเฉฐเจง;
  • catalog_category_entity_*: EAV เจ—เฉเจฃ เจฎเฉเฉฑเจฒ;

เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจ–เจพเจฒเฉ€ Magento เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจตเจฟเฉฑเจš, เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš 2 เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจนเจจ (เจฎเฉˆเจ‚ เจ•เจพเจฒเจฎ เจฆเฉ‡ เจจเจพเจฎ เจ›เฉ‹เจŸเฉ‡ เจ•เฉ€เจคเฉ‡ เจนเจจ: crt - created_at, upd - updated_at):

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

id=1 เจตเจพเจฒเฉ€ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจชเฉ‚เจฐเฉ‡ Magento เจ•เฉˆเจŸเจพเจฒเจพเจ— เจฆเฉ€ เจฐเฉ‚เจŸ เจนเฉˆ เจ…เจคเฉ‡ เจจเจพ เจคเจพเจ‚ เจเจกเจฎเจฟเจจ เจชเฉˆเจจเจฒ เจœเจพเจ‚ เจซเจฐเฉฐเจŸ เจชเฉ‡เจœ 'เจคเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆเฅค id=2 เจจเจพเจฒ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ (เจชเฉ‚เจฐเจต-เจจเจฟเจฐเจงเจพเจฐเจค เจธเจผเฉเจฐเฉ‡เจฃเฉ€) เจฎเฉเฉฑเจ– เจธเจพเจˆเจŸ เจฆเฉ‡ เจฎเฉเฉฑเจ– เจธเจŸเฉ‹เจฐ เจฒเจˆ เจฐเฉ‚เจŸ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจนเฉˆ (เจฎเฉเฉฑเจ– เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ เจธเจŸเฉ‹เจฐ) เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจœเจฆเฉ‹เจ‚ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจคเฉˆเจจเจพเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ (เจตเฉ‡เจ–เฉ‹เฅค เจเจกเจฎเจฟเจจ / เจธเจŸเฉ‹เจฐ / เจธเจพเจฐเฉ‡ เจธเจŸเฉ‹เจฐ). เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจธเจŸเฉ‹เจฐ เจฆเฉ€ เจฐเฉ‚เจŸ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจตเฉ€ เจธเจพเจนเจฎเจฃเฉ‡ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจธเจฟเจฐเจซ เจ‡เจธ เจฆเฉ€เจ†เจ‚ เจ‰เจช เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจนเจจ.

เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจฒเฉ‡เจ– เจฆเจพ เจตเจฟเจธเจผเจพ เจ…เจœเฉ‡ เจตเฉ€ เจ‰เจคเจชเจพเจฆเจพเจ‚ 'เจคเฉ‡ เจกเฉ‡เจŸเจพ เจ†เจฏเจพเจค เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ, เจฎเฉˆเจ‚ เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจฟเฉฑเจงเฉ€ เจเจ‚เจŸเจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเจนเฉ€เจ‚ เจ•เจฐเจพเจ‚เจ—เจพ, เจชเจฐ เจฎเฉˆเจ—เฉ‡เจจเจŸเฉ‹ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจ•เจฒเจพเจธเจพเจ‚ (เจฎเจพเจกเจฒ เจ…เจคเฉ‡ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚) เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เจพเฅค เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจธเจฟเฉฑเจงเฉ€ เจเจ‚เจŸเจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจธเจฟเจฐเจซ เจ†เจฏเจพเจค เจ•เฉ€เจคเฉ‡ เจ‰เจคเจชเจพเจฆ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจจเจพเจฒ เจœเฉ‹เฉœเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ (เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจจเจพเจฎ เจจเจพเจฒ เจฎเฉ‡เจฒ เจ–เจพเจ‚เจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจฎเฉ‡เจฒเจฃ เจฆเฉŒเจฐเจพเจจ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจ†เจˆเจกเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ):

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: เจ‰เจคเจชเจพเจฆเจพเจ‚ เจจเฉ‚เฉฐ เจธเจฟเฉฑเจงเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจ†เจฏเจพเจค เจ•เจฐเฉ‹

เจธเฉฐเจ–เฉ‡เจช

เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฆเจพ เจ‰เจนเฉ€ เจธเฉˆเฉฑเจŸ (10 เจŸเฉเจ•เฉœเฉ‡) เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจชเจฟเจ›เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจ˜เฉฑเจŸ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจ•เฉเจฐเจฎ เจฆเฉ€ เจคเฉ€เจฌเจฐเจคเจพ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ†เจฏเจพเจค เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ (1 เจธเจ•เจฟเฉฐเจŸ เจฌเจจเจพเจฎ 10)เฅค เจ—เจคเฉ€ เจฆเจพ เจตเจงเฉ‡เจฐเฉ‡ เจธเจนเฉ€ เจ…เฉฐเจฆเจพเจœเจผเจพ เจฒเจ—เจพเจ‰เจฃ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจ—เจฟเจฃเจคเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ - เจ•เจˆ เจธเฉŒ, เจœเจพเจ‚ เจฌเจฟเจนเจคเจฐ เจ…เจœเฉ‡ เจตเฉ€ เจนเจœเจผเจพเจฐเจพเจ‚เฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เฉฐเจจเฉ‡ เจ›เฉ‹เจŸเฉ‡ เจ†เจ•เจพเจฐ เจฆเฉ‡ เจ‡เจจเจชเฉเจŸ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจ‡เจน เจธเจฟเฉฑเจŸเจพ เจ•เฉฑเจข เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ Magento (เจฎเจพเจกเจฒ เจ…เจคเฉ‡ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚) เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฆเจพเจจ เจ•เฉ€เจคเฉ‡ เจ—เจ เจธเจพเจงเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ (เจฎเฉˆเจ‚ เจœเจผเฉ‹เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ - เจฌเจนเฉเจค เจ•เฉเจ!) เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจฆเฉ‡ เจตเจฟเจ•เจพเจธ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจ•เจฐเจฆเจพ เจนเฉˆ, เจชเจฐ เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเฉŒเจฐ 'เจคเฉ‡ (เจฎเฉˆเจ‚ เจœเจผเฉ‹เจฐ เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚ - เจฌเจนเฉเจค เจ•เฉเจ!) เจกเจพเจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจกเจพเจŸเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ—เจคเฉ€ เจจเฉ‚เฉฐ เจ˜เจŸเจพเจ“เฅค

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจชเจพเจฃเฉ€ เจ—เจฟเฉฑเจฒเจพ เจนเฉ‹ เจ—เจฟเจ† เจ…เจคเฉ‡ เจ‡เจน เจ•เฉ‹เจˆ เจ–เฉเจฒเจพเจธเจพ เจจเจนเฉ€เจ‚ เจนเฉˆ. เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจนเฉเจฃ เจฎเฉ‡เจฐเฉ‡ เจ•เฉ‹เจฒ เจ–เฉ‡เจกเจฃ เจฒเจˆ เจ•เฉ‹เจก เจนเฉˆ เจ…เจคเฉ‡ เจธเจผเจพเจ‡เจฆ เจ•เฉเจ เจนเฉ‹เจฐ เจฆเจฟเจฒเจšเจธเจช เจธเจฟเฉฑเจŸเฉ‡ 'เจคเฉ‡ เจ†เจ‰เจฃเจพ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹