ProHoster > Блог > Isakoso > Magento 2: gbe awọn ọja wọle taara sinu ibi ipamọ data
Magento 2: gbe awọn ọja wọle taara sinu ibi ipamọ data
В ti tẹlẹ article Mo ṣe apejuwe ilana ti gbigbe ọja wọle si Magento 2 ni ọna deede - nipasẹ awọn awoṣe ati awọn ibi ipamọ. Ọna deede ni iyara sisẹ data kekere pupọ. Kọǹpútà alágbèéká mi ti n ṣejade nipa ọja kan fun iṣẹju kan. Ni lilọsiwaju yii, Mo gbero ọna yiyan lati gbe ọja wọle - nipasẹ titẹsi taara sinu ibi ipamọ data, ni ikọja awọn ọna ṣiṣe Magento 2 boṣewa (awọn awoṣe, awọn ile-iṣelọpọ, awọn ibi ipamọ). Ọkọọkan awọn igbesẹ lati gbe awọn ọja wọle le ṣe deede si eyikeyi ede siseto ti o le ṣiṣẹ pẹlu MySQL.
be: Magento ni iṣẹ ṣiṣe ti o ṣetan fun agbewọle data ati, julọ seese, o yoo to fun o. Sibẹsibẹ, ti o ba nilo iṣakoso pipe diẹ sii lori ilana agbewọle, ko ni opin si murasilẹ faili CSV fun ohun ti o ni, kaabọ si ologbo.
Awọn koodu ti o waye lati kikọ awọn nkan mejeeji ni a le wo ni module Magento "flancer32 / mage2_ext_demo_import". Eyi ni diẹ ninu awọn ihamọ ti Mo tẹle lati ṣe irọrun koodu module demo naa:
Awọn ọja nikan ni a ṣẹda, kii ṣe imudojuiwọn.
Ile-ipamọ kan
Awọn orukọ ẹka nikan ni a ko wọle, laisi eto wọn
Awọn ẹya data ni ibamu pẹlu ẹya 2.3
JSON fun gbigbe ọja kan wọle:
{
"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"
}
Akopọ ti awọn ipele akọkọ ti agbewọle
iforukọsilẹ ti ọja funrararẹ
asopọ laarin ọja ati aaye ayelujara
Awọn abuda ọja ipilẹ (EAV)
data akojo oja (opoiye ọja ninu iṣura)
media (awọn aworan)
asopọ pẹlu katalogi isori
Iforukọsilẹ ọja
Alaye ọja ipilẹ ni a le rii ni 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`)
)
Alaye to kere julọ ti o nilo lati ṣẹda titẹ sii ni iforukọsilẹ ọja ni:
attribute_set_id
sku
afikun:
type_id — ti a ko ba sọ pato rẹ, lẹhinna 'rọrun' yoo ṣee lo
Lati kọ taara si ibi ipamọ data, Mo lo oluyipada DB ti Magento funrararẹ:
Ọja tuntun ti a forukọsilẹ ko sibẹsibẹ ni orukọ tabi apejuwe. Gbogbo eyi ni a ṣe nipasẹ EAV eroja. Eyi ni atokọ ti awọn abuda ọja ipilẹ ti o nilo fun ọja lati ṣafihan ni deede ni iwaju:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Ẹya ara ọtọ ti wa ni afikun si ọja bii eyi (awọn alaye ti gbigba idamo ati iru ẹya lati koodu rẹ ti yọkuro):
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);
}
}
Lilo koodu abuda, a pinnu id ati iru data (datetime, decimal, int, text, varchar), lẹhinna kọ data fun window iṣakoso sinu tabili ti o yẹ (store_id = 0).
Lẹhin fifi awọn abuda ti o wa loke si ọja naa, o gba aworan yii ni igbimọ abojuto:
Oja data
Bibẹrẹ lati ẹya 2.3 ni Magento, awọn tabili afiwera meji wa ti o pese ibi ipamọ ti alaye akojo oja (iye ọja):
cataloginventory_*: atijọ be;
inventory_*: titun be (MSI - Multi Orisun Oja);
O nilo lati ṣafikun data akojo oja si awọn ẹya mejeeji, nitori titun be ni ko sibẹsibẹ patapata ominira ti atijọ (o jẹ gidigidi seese wipe fun default ile ise ninu titun be a tabili lowo cataloginventory_stock_status bi inventory_stock_1).
kataloginventory_
Nigbati o ba n gbe Magneto 2.3 lọ, a ni awọn titẹ sii 2 ni ibẹrẹ store_website, eyiti o ni ibamu si awọn aaye meji - iṣakoso ati alabara akọkọ:
Iyẹn ni, ninu eto atijọ wa “ile itaja” kan ṣoṣo ni o wa (stock) ati pe o ni asopọ si oju opo wẹẹbu iṣakoso. Fifi titun eyi nipasẹ abojuto nronu sources/stocks ni MSI (titun be) ko ni ja si ni titun awọn titẹ sii ni cataloginventory_stock.
Awọn data akojo oja nipa awọn ọja ni ọna atijọ ti wa ni ibẹrẹ ni awọn tabili:
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);
}
akojo oja_
Ni ibẹrẹ, eto tuntun fun titoju data akojo oja ni 1 ”.orisun"(inventory_source):
«Orisun» duro fun ibi ipamọ ti ara fun awọn ọja (igbasilẹ naa ni awọn ipoidojuko ti ara ati adirẹsi ifiweranṣẹ). "Iṣura"jẹ iṣọkan ọgbọn ti ọpọlọpọ awọn "orisun" (inventory_source_stock_link)
ni ipele eyiti asopọ si ikanni tita waye (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Ni idajọ nipasẹ ọna data, ọpọlọpọ awọn oriṣi ti awọn ikanni tita ni a ro, ṣugbọn nipasẹ aiyipada nikan ni asopọ "iṣura"-"aaye ayelujara"(ọna asopọ si oju opo wẹẹbu tẹle koodu oju opo wẹẹbu - base).
Ọkan"ile itaja"le ti sopọ si orisirisi"awọn orisun"ati ọkan"orisun"- si orisirisi"awọn ile ise"(Ọpọlọpọ-si-Ọpọlọpọ ibasepo). Awọn imukuro jẹ aiyipada"orisun"Ati"ile itaja". Wọn ko tun ni asopọ si awọn nkan miiran (iwọn ni ipele koodu - aṣiṣe naa "Ko le fi ọna asopọ pamọ ti o ni ibatan si Orisun Aiyipada tabi Iṣura Aiyipada"). Awọn alaye diẹ sii nipa eto MSI ni Magento 2 ni a le rii ninu nkan naa “Eto iṣakoso ile-iṣẹ ni lilo CQRS ati Iṣẹlẹ Iṣẹlẹ. Apẹrẹ".
Emi yoo lo iṣeto aiyipada ati ṣafikun gbogbo alaye akojo oja si orisun default, eyiti o ni ipa ninu ikanni tita ti o ni nkan ṣe pẹlu oju opo wẹẹbu pẹlu koodu naa base (ni ibamu si opin iwaju ti ile itaja - wo store_website):
Lẹhin fifi data ọja-ọja kun ọja naa ninu nronu abojuto, o gba aworan yii:
Media
Nigbati “pẹlu ọwọ” ṣafikun aworan kan si ọja nipasẹ ẹgbẹ alabojuto, alaye ti o wulo ni a kọ si isalẹ ninu awọn tabili atẹle:
catalog_product_entity_media_gallery: media iforukọsilẹ (awọn aworan ati awọn faili fidio);
catalog_product_entity_media_gallery_value: sisopọ media si awọn ọja ati awọn ifihan (ipopo);
catalog_product_entity_media_gallery_value_to_entity: sisopọ media si awọn ọja nikan (aigbekele akoonu media aiyipada fun ọja naa);
catalog_product_entity_varchar: Awọn ipa ti o ti lo aworan ti wa ni ipamọ nibi;
ati awọn aworan ara wọn ti wa ni fipamọ si awọn liana ./pub/media/catalog/product/x/y/nibo x и y - awọn lẹta akọkọ ati keji ti orukọ faili aworan naa. Fun apẹẹrẹ, faili image.png yẹ ki o wa ni fipamọ bi ./pub/media/catalog/product/i/m/image.png, ki Syeed le lo bi aworan nigbati o n ṣe apejuwe awọn ọja lati inu iwe-ipamọ naa.
catalog_product_entity_media_gallery
Forukọsilẹ Pipa ni ./pub/media/catalog/product/ faili media (ilana ti gbigbe faili funrararẹ ko ni ijiroro ninu nkan yii):
A ṣepọ faili media ti o forukọsilẹ pẹlu ọja ti o baamu laisi ti so mọ eyikeyi iwaju ile itaja. Ko ṣe afihan ibiti a ti lo data gangan gangan ati idi ti ko ṣee ṣe lati wọle si data lati tabili iṣaaju, ṣugbọn tabili yii wa ati pe a kọ data naa si nigbati a ṣafikun aworan si ọja naa. Nitorinaa iyẹn ni.
Faili media le ṣee lo pẹlu awọn ipa oriṣiriṣi (koodu ti o baamu jẹ itọkasi ni awọn akọmọ):
ipilẹ(image)
Aworan Kekere (small_image)
Eekanna atanpako (thumbnail)
Aworan Swatch (swatch_image)
Awọn ipa ọna asopọ si faili media jẹ ohun ti o ṣẹlẹ ni deede catalog_product_entity_varchar. Koodu abuda jẹ iru si koodu ti o wa ninu "Awọn abuda ọja ipilẹ".
Lẹhin fifi aworan kun ọja naa ni igbimọ abojuto o dabi eyi:
Ilana
Awọn tabili akọkọ ti o ni data ninu nipasẹ ẹka:
catalog_category_entity: Forukọsilẹ ti awọn ẹka;
catalog_category_product: asopọ laarin awọn ọja ati awọn ẹka;
catalog_category_entity_*: Awọn iye abuda EAV;
Ni ibẹrẹ, ninu ohun elo Magento ti o ṣofo, iforukọsilẹ ẹka ni awọn ẹka 2 (Mo kuru awọn orukọ ọwọn: crt - created_at, upd - updated_at):
Ẹka pẹlu id=1 ni gbongbo gbogbo iwe akọọlẹ Magento ati pe ko si boya ninu igbimọ abojuto tabi ni oju-iwe iwaju. Ẹka pẹlu id=2 (Aiyipada Ẹka) jẹ ẹka gbongbo fun ile itaja akọkọ ti aaye akọkọ (Ile itaja oju opo wẹẹbu akọkọ) ti a ṣẹda nigbati ohun elo naa ba wa (wo. Abojuto / Awọn ile itaja / Gbogbo Awọn ile itaja). Pẹlupẹlu, ẹka gbongbo ti ile itaja funrararẹ ko tun wa ni iwaju, awọn ẹka-ẹka rẹ nikan.
Niwọn igba ti koko ọrọ yii tun n gbe data wọle lori awọn ọja, Emi kii yoo lo titẹsi taara sinu ibi ipamọ data nigbati o ṣẹda awọn ẹka, ṣugbọn yoo lo awọn kilasi ti Magento funrararẹ (awọn awoṣe ati awọn ibi ipamọ). Titẹwọle taara sinu ibi ipamọ data jẹ lilo nikan lati ṣe idapọ ọja ti a ko wọle pẹlu ẹka kan (ẹka naa ti baamu pẹlu orukọ rẹ, ati pe id ti ẹya naa ti gba pada lakoko ibaramu):
Awọn ọja ninu nronu abojuto lẹhin ṣiṣe awọn iṣe afikun:
ati ni iwaju:
Akopọ
Eto kanna ti awọn ọja (awọn ege 10) bi ninu nkan ti tẹlẹ ti gbe wọle o kere ju aṣẹ titobi ni iyara (1 keji dipo 10). Lati ṣe iṣiro iyara diẹ sii ni deede, o nilo nọmba nla ti awọn ọja - ọpọlọpọ awọn ọgọrun, tabi dara julọ sibẹsibẹ awọn ẹgbẹẹgbẹrun. Sibẹsibẹ, paapaa pẹlu iru iwọn kekere ti data titẹ sii, a le pinnu pe lilo awọn irinṣẹ ti Magento pese (awọn awoṣe ati awọn ibi ipamọ) jẹ pataki (Mo tẹnumọ - pataki!) yiyara idagbasoke ti iṣẹ ṣiṣe ti o nilo, ṣugbọn ni akoko kanna ni pataki (Mo tẹnumọ - pataki!) dinku iyara ti data n wọle sinu ibi ipamọ data.
Bi abajade, omi ti jade lati jẹ tutu ati eyi kii ṣe ifihan. Sibẹsibẹ, ni bayi Mo ni koodu lati mu ṣiṣẹ pẹlu ati boya wa si awọn ipinnu ti o nifẹ diẹ sii.