Magento 2: เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเชพ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เช†เชฏเชพเชค เช•เชฐเซ‹

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

เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซ‹ เช‡เชจเช•เชพเชฐ: Magento เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เช›เซ‡ เชกเซ‡เชŸเชพ เช†เชฏเชพเชค เช…เชจเซ‡, เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡, เชคเซ‡ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเซเช‚ เชนเชถเซ‡. เชœเซ‹ เช•เซ‡, เชœเซ‹ เชคเชฎเชจเซ‡ เช†เชฏเชพเชค เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชชเชฐ เชตเชงเซ เชธเช‚เชชเซ‚เชฐเซเชฃ เชจเชฟเชฏเช‚เชคเซเชฐเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชœเซ‡ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡ CSV เชซเชพเช‡เชฒ เชคเซˆเชฏเชพเชฐ เช•เชฐเชตเชพ เชธเซเชงเซ€ เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชจ เชนเซ‹เชฏ, เชคเซ‹ เช•เซ‡เชŸเชฎเชพเช‚ เชธเซเชตเชพเช—เชค เช›เซ‡.

Magento 2: เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเชพ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เช†เชฏเชพเชค เช•เชฐเซ‹

เชฌเช‚เชจเซ‡ เชฒเซ‡เช–เซ‹ เชฒเช–เชตเชพเชฅเซ€ เช†เชตเชคเชพ เช•เซ‹เชกเชจเซ‡ เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹ เชฎเซ‹เชกเซเชฏเซเชฒเชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ "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 เชตเชฟเชถเซ‡เชทเชคเชพ เชฎเซ‚เชฒเซเชฏเซ‹;

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช–เชพเชฒเซ€ เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚, เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ 2 เช•เซ‡เชŸเซ‡เช—เชฐเซ€เช เชนเซ‹เชฏ เช›เซ‡ (เชฎเซ‡เช‚ เช•เซ‰เชฒเชฎเชจเชพ เชจเชพเชฎ เชŸเซ‚เช‚เช•เชพเชตเซเชฏเชพ เช›เซ‡: crt - created_at, upd - updated_at):

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

id=1 เชธเชพเชฅเซ‡เชจเซ€ เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เชธเชฎเช—เซเชฐ Magento เช•เซ…เชŸเซ‡เชฒเซ‹เช—เชจเซเช‚ เชฎเซ‚เชณ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒเชฎเชพเช‚ เช…เชฅเชตเชพ เชซเซเชฐเชจเซเชŸ เชชเซ‡เชœ เชชเชฐ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€. id=2 เชธเชพเชฅเซ‡ เชถเซเชฐเซ‡เชฃเซ€ (เชกเชฟเชซเซ‹เชฒเซเชŸ เช•เซ‡เชŸเซ‡เช—เชฐเซ€) เช เชฎเซเช–เซเชฏ เชธเชพเช‡เชŸเชจเชพ เชฎเซเช–เซเชฏ เชธเซเชŸเซ‹เชฐ เชฎเชพเชŸเซ‡ เชฐเซ‚เชŸ เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เช›เซ‡ (เชฎเซเช–เซเชฏ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชธเซเชŸเซ‹เชฐเชœเซเชฏเชพเชฐเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชœเซเช“. เชเชกเชฎเชฟเชจ / เชธเซเชŸเซ‹เชฐเซเชธ / เชฌเชงเชพ เชธเซเชŸเซ‹เชฐเซเชธ). เชคเชฆเซเชชเชฐเชพเช‚เชค, เชธเซเชŸเซ‹เชฐเชจเซ€ เชฐเซเชŸ เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เชชเชฃ เช†เช—เชณเชจเชพ เชญเชพเช—เชฎเชพเช‚ เช‰เชชเชฒเชฌเซเชง เชจเชฅเซ€, เชซเช•เซเชค เชคเซ‡เชจเซ€ เช‰เชชเช•เซ‡เชŸเซ‡เช—เชฐเซ€เช.

เช† เชฒเซ‡เช–เชจเซ‹ เชตเชฟเชทเชฏ เชนเชœเซ เชชเชฃ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เชชเชฐเชจเชพ เชกเซ‡เชŸเชพเชจเซ€ เช†เชฏเชพเชค เช•เชฐเชตเชพเชจเซ‹ เชนเซ‹เชตเชพเชฅเซ€, เชนเซเช‚ เช•เซ‡เชŸเซ‡เช—เชฐเซ€เช เชฌเชจเชพเชตเชคเซ€ เชตเช–เชคเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเซ€ เชชเซเชฐเชตเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ Magento เชฆเซเชตเชพเชฐเชพ เชœ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชตเชฐเซเช—เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถ (เชฎเซ‹เชกเซ‡เชฒ เช…เชจเซ‡ เชญเช‚เชกเชพเชฐ). เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เชเชจเซเชŸเซเชฐเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชซเช•เซเชค เช†เชฏเชพเชคเซ€ เชชเซเชฐเซ‹เชกเช•เซเชŸเชจเซ‡ เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เชธเชพเชฅเซ‡ เชธเชพเช‚เช•เชณเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡ (เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เชคเซ‡เชจเชพ เชจเชพเชฎเชฅเซ€ เชฎเซ‡เชณ เช–เชพเชคเซ€ เชนเซ‹เชฏ เช›เซ‡, เช…เชจเซ‡ เชฎเซ‡เชšเชฟเช‚เช— เชฆเชฐเชฎเชฟเชฏเชพเชจ เช•เซ‡เชŸเซ‡เช—เชฐเซ€ เช†เชˆเชกเซ€ เชฎเซ‡เชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡):

function create($prodId, $catId)
{
    /** @var MagentoFrameworkAppResourceConnection $this->resource */
    /** @var MagentoFrameworkDBAdapterPdoMysql $conn */
    $conn = $this->resource->getConnection();
    $table = $this->resource->getTableName('catalog_category_product');
    $bind = [
        'category_id' => $catId,
        'product_id' => $prodId,
    ];
    $conn->insert($table, $bind);
}

"เช•เซ‡เชŸเซ‡เช—เชฐเซ€ 1" เช…เชจเซ‡ "เช•เซ‡เชŸเซ‡เช—เชฐเซ€ 2" เชถเซเชฐเซ‡เชฃเซ€เช“เชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจ เชฒเชฟเช‚เช• เช‰เชฎเซ‡เชฐเซเชฏเชพ เชชเช›เซ€, เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒเชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจ เชตเชฟเช—เชคเซ‹ เช•เช‚เชˆเช• เช†เชจเชพ เชœเซ‡เชตเซ€ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

Magento 2: เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเชพ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เช†เชฏเชพเชค เช•เชฐเซ‹

เชตเชงเชพเชฐเชพเชจเซ€ เช•เซเชฐเชฟเชฏเชพเช“

เชเช•เชตเชพเชฐ เชกเซ‡เชŸเชพ เช†เชฏเชพเชค เชชเซ‚เชฐเซเชฃ เชฅเชˆ เชœเชพเชฏ, เชคเชฎเชพเชฐเซ‡ เชจเซ€เชšเซ‡เชจเชพ เชตเชงเชพเชฐเชพเชจเชพ เชชเช—เชฒเชพเช‚ เชญเชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡:

  • เชกเซ‡เชŸเชพ เช‡เชจเซเชกเซ‡เช•เซเชธเซ€เช‚เช—: เช•เชจเซเชธเซ‹เชฒเชฎเชพเช‚ เช•เซ‰เชฒ เช•เชฐเซ‹ ./bin/magento indexer:reindex;
  • เช‰เชคเซเชชเชพเชฆเชจเซ‹/เชถเซเชฐเซ‡เชฃเซ€เช“ เชฎเชพเชŸเซ‡ URL เชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฌเชจเชพเชตเชตเซเช‚: เชคเชฎเซ‡ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ โ€œelgentos/regenerate-catalog-urlsยซ

เชตเชงเชพเชฐเชพเชจเซ€ เช•เซเชฐเชฟเชฏเชพเช“ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชเชกเชฎเชฟเชจ เชชเซ‡เชจเชฒเชฎเชพเช‚ เชชเซเชฐเซ‹เชกเช•เซเชŸเซเชธ:

Magento 2: เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเชพ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เช†เชฏเชพเชค เช•เชฐเซ‹

เช…เชจเซ‡ เช†เช—เชณ:

Magento 2: เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชธเซ€เชงเชพ เช‰เชคเซเชชเชพเชฆเชจเซ‹ เช†เชฏเชพเชค เช•เชฐเซ‹

เชธเชพเชฐเชพเช‚เชถ

เช…เช—เชพเช‰เชจเชพ เชฒเซ‡เช–เชจเซ€ เชœเซ‡เชฎ เช‰เชคเซเชชเชพเชฆเชจเซ‹เชจเซ‹ เชธเชฎเชพเชจ เชธเชฎเซ‚เชน (10 เชŸเซเช•เชกเชพเช“) เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ เชคเซ€เชตเซเชฐเชคเชพเชจเชพ เช•เซเชฐเชฎเชฎเชพเช‚ เชเชกเชชเชฅเซ€ (1 เชตเชฟเชฐเซเชฆเซเชง 10 เชธเซ‡เช•เชจเซเชก) เช†เชฏเชพเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเชกเชชเชจเซ‹ เชตเชงเซ เชธเชšเซ‹เชŸ เช…เช‚เชฆเชพเชœ เชฒเช—เชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เช‰เชคเซเชชเชพเชฆเชจเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ - เช•เซ‡เชŸเชฒเชพเช• เชธเซ‹, เช…เชฅเชตเชพ เชตเชงเซ เชธเชพเชฐเชพ เช›เชคเชพเช‚ เชนเชœเชพเชฐเซ‹. เชœเซ‹ เช•เซ‡, เช‡เชจเชชเซเชŸ เชกเซ‡เชŸเชพเชจเชพ เช†เชŸเชฒเชพ เชจเชพเชจเชพ เช•เชฆ เชธเชพเชฅเซ‡ เชชเชฃ, เช…เชฎเซ‡ เชจเชฟเชทเซเช•เชฐเซเชท เชชเชฐ เช†เชตเซ€ เชถเช•เซ€เช เช›เซ€เช เช•เซ‡ เชฎเซ‡เชœเซ‡เชจเซเชŸเซ‹ (เชฎเซ‹เชกเซ‡เชฒ เช…เชจเซ‡ เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เช) เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡เชฒ เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เช›เซ‡ (เชนเซเช‚ เชญเชพเชฐ เชฎเซ‚เช•เซเช‚ เช›เซเช‚ - เช–เซ‚เชฌ!) เชœเชฐเซ‚เชฐเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเชพ เชตเชฟเช•เชพเชธเชจเซ‡ เชตเซ‡เช— เช†เชชเซ‹, เชชเชฐเช‚เชคเซ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ (เชนเซเช‚ เชญเชพเชฐ เชฎเซ‚เช•เซเช‚ เช›เซเช‚ - เช–เซ‚เชฌ!) เชœเซ‡ เชเชกเชชเซ‡ เชกเซ‡เชŸเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชชเซเชฐเชตเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‡ เช˜เชŸเชพเชกเซ‡ เช›เซ‡.

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เชชเชพเชฃเซ€ เชญเซ€เชจเซเช‚ เชฅเชˆ เช—เชฏเซเช‚ เช…เชจเซ‡ เช† เช•เซ‹เชˆ เชธเชพเช•เซเชทเชพเชคเซเช•เชพเชฐ เชจเชฅเซ€. เชœเซ‹ เช•เซ‡, เชนเชตเซ‡ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฐเชฎเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชก เช›เซ‡ เช…เชจเซ‡ เช•เชฆเชพเชš เช•เซ‡เชŸเชฒเชพเช• เชตเชงเซ เชฐเชธเชชเซเชฐเชฆ เชคเชพเชฐเชฃเซ‹ เชชเชฐ เช†เชตเซ€เชถ.

เชธเซ‹เชฐเซเชธ: www.habr.com