Magento 2: kenya lihlahisoa ka kotloloho ho database
В sehlooho se fetileng Ke hlalositse ts'ebetso ea ho kenya lihlahisoa ho Magento 2 ka mokhoa o tloaelehileng - ka mehlala le polokelo. Mokhoa o tloaelehileng o na le lebelo le tlase haholo la ts'ebetso ea data. Laptop ea ka e ne e hlahisa sehlahisoa se le seng ka motsotsoana. Ts'ebetsong ena, ke nahana ka mokhoa o mong oa ho kenya sehlahisoa - ka ho kena ka kotloloho ho database, ho feta mekhoa e tloaelehileng ea Magento 2 (mehlala, lifeme, polokelo ea polokelo). Tatelano ea mehato ea ho kenya lihlahisoa e ka fetoloa ho puo leha e le efe ea lenaneo e ka sebetsang le MySQL.
ikgololo: Magento e na le ts'ebetso e lokiselitsoeng bakeng sa ho kenya data 'me, ho ka etsahala hore ebe, ho tla lekana bakeng sa hau. Leha ho le joalo, haeba u hloka taolo e felletseng holim'a ts'ebetso ea ho reka kantle ho naha, eseng feela ho lokisa faele ea CSV bakeng sa seo u nang le sona, amohela katse.
Khoutu e hlahisoang ke ho ngola lingoliloeng ka bobeli e ka bonoa ho module ea Magento "flancer32/mage2_ext_demo_import". Mona ke lithibelo tseo ke li latileng ho nolofatsa khoutu ea mojule oa demo:
Lihlahisoa li etsoa feela, ha li ntlafatsoe.
Sebaka se le seng sa polokelo
Ke mabitso a lihlopha feela a romelloang kantle ho naha, ntle le sebopeho sa ona
Mehaho ea data e lumellana le mofuta oa 2.3
JSON bakeng sa ho kenya sehlahisoa se le seng:
{
"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"
}
Kakaretso ea mekhahlelo e meholo ea ho kenya
ngodiso ya sehlahiswa ka bosona
khokahano lipakeng tsa sehlahisoa le webosaete
lintlha tsa mantlha tsa sehlahisoa (EAV)
Lintlha tsa thepa (bongata ba sehlahisoa se setokong)
media (litšoantšo)
khokahano le lihlopha tsa lethathamo
Ngoliso ea Lihlahisoa
Lintlha tsa mantlha tsa sehlahisoa li ka fumanoa ho 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`)
)
Boitsebiso bo fokolang bo hlokehang ho etsa keno ho registry ea lihlahisoa ke:
attribute_set_id
sku
tlatsetso:
type_id - haeba re sa e hlakise, ho tla sebelisoa 'bonolo'
Ho ngola ka kotloloho ho database, ke sebelisa adaptara ea DB ea Magento ka boeona:
Sehlahisoa se sa tsoa ngolisoa ha se na lebitso kapa tlhaloso. Sena sohle se etsoa ka letsoho Litšobotsi tsa EAV. Mona ke lethathamo la litšoaneleho tsa mantlha tsa sehlahisoa tse hlokahalang e le hore sehlahisoa se ka hlahisoa ka nepo ka pele:
name
price
description
short_description
status
tax_class_id
url_key
visibility
Sehlahisoa se kang sena se eketsoa tšobotsi e fapaneng (lintlha tsa ho fumana sekhetho le mofuta oa semelo ho tsoa ho khoutu ea sona li siiloe):
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);
}
}
Re sebelisa khoutu ea semelo, re khetha id le mofuta oa data (datetime, decimal, int, text, varchar), ebe u ngola lintlha tsa fensetere ea tsamaiso tafoleng e nepahetseng (store_id = 0).
Kamora ho kenyelletsa litšoaneleho tse kaholimo ho sehlahisoa, o fumana setšoantšo sena phanele ea admin:
Lintlha tsa thepa
Ho tloha ho mofuta oa 2.3 ho Magento, ho na le litafole tse peli tse tšoanang tse fanang ka polokelo ea tlhaiso-leseling ea thepa (palo ea sehlahisoa):
cataloginventory_*: sebopeho sa khale;
inventory_*: sebopeho se secha (MSI - Multi Source Inventory);
U hloka ho eketsa lintlha tsa thepa ho mehaho ka bobeli, hobane sebopeho se secha ha se e-so ikemele ka ho feletseng ho sa khale (ho ka etsahala hore bakeng sa default setsing sa polokelo mohahong o mocha tafole e ameha cataloginventory_stock_status joalo ka inventory_stock_1).
lethathamo la thepa_
Ha re tsamaisa Magneto 2.3 qalong re na le likenyelletso tse 2 ho store_website, e tsamaellanang le libaka tse peli - tsamaiso le moreki ea ka sehloohong:
Ke hore, mohahong oa rona oa khale ho na le "sebaka sa polokelo" se le seng feela (stock) mme e hokahane le webosaete ea tsamaiso. Ho eketsa tse ncha ka phanele ea admin sources/stocks ho MSI (sebopeho se secha) ha se hlahise likhakanyo tse ncha cataloginventory_stock.
Lintlha tsa thepa mabapi le lihlahisoa tsa sebopeho sa khale li qala ho rekotoa litafoleng:
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);
}
inventory_
Qalong, sebopeho se secha sa ho boloka boitsebiso ba thepa se na le 1 ".mohloli"(inventory_source):
«Mohloli»e emela polokelo ea lihlahisoa tsa lihlahisoa (rekoto e na le likhokahano tsa 'mele le aterese ea poso). "Ntlo ea polokelo"ke kopano e utloahalang ea" mehloli e 'maloa (inventory_source_stock_link)
boemong boo khokahanyo ea kanale ea thekiso e etsahalang (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
Ho latela sebopeho sa data, ho nahanoa mefuta e fapaneng ea liteishene tsa thekiso, empa ka boiketsetso ke khokahano feela "Stock"-"websaeteng"( sehokelo sa sebaka sa Marang-rang se latela khoutu ea sebaka sa Marang-rang - base).
One"ntlo ea polokelo"e ka amahanngoa le tse 'maloa"mehloli"mme e mong"mohloli"- ho tse 'maloa"matlo a polokelo"(kamano ea ba bangata ho ea ho ba bangata). Mekhelo ke ea kamehla "mohloli"Le"ntlo ea polokelo". Ha li hokahane hape le mekhatlo e meng (moeli boemong ba khoutu - phoso "Ha e khone ho boloka sehokelo se amanang le Mohloli oa Kamehla kapa Setoko sa Kamehla"). Lintlha tse ling mabapi le sebopeho sa MSI ho Magento 2 li ka fumanoa sehloohong "Sistimi ea taolo ea polokelo ea thepa e sebelisang CQRS le Event Sourcing. Moralo".
Ke tla sebelisa tlhophiso ea kamehla mme ke kenye lintlha tsohle tsa lethathamo mohloling default, e amehang mocha oa thekiso o amanang le sebaka sa marang-rang se nang le khoutu base (e tsamaellana le pheletso e ka pele ea lebenkele - bona store_website):
Kamora ho eketsa lintlha tsa thepa ho sehlahisoa ho phanele ea admin, o fumana setšoantšo sena:
Litaba
Ha "ka letsoho" o kenya setšoantšo ho sehlahisoa ka phanele ea tsamaiso, lintlha tse amehang li ngoloa ka har'a litafole tse latelang:
catalog_product_entity_media_gallery: ngoliso ea mecha ea litaba (litšoantšo le lifaele tsa video);
catalog_product_entity_media_gallery_value: ho hokahanya mecha ea litaba le lihlahisoa le li-showcases (localization);
catalog_product_entity_media_gallery_value_to_entity: ho hokahanya mecha ea litaba le lihlahisoa feela (ho ka etsahala hore ebe litaba tsa media tse sa fetoheng bakeng sa sehlahisoa);
catalog_product_entity_varchar: Mesebetsi eo setšoantšo se sebelisoang ho eona e bolokiloe mona;
'me litšoantšo ka botsona li bolokiloe bukeng ./pub/media/catalog/product/x/y/kae x и y — tlhaku ea pele le ea bobeli ea lebitso la faele ea setšoantšo. Ka mohlala, file image.png e lokela ho bolokoa joalo ka ./pub/media/catalog/product/i/m/image.png, e le hore sethala se ka se sebelisa e le setšoantšo ha se hlalosa lihlahisoa tse tsoang lethathamong la libuka.
catalog_product_entity_media_gallery
Ngoliso e kentsoeng ho ./pub/media/catalog/product/ media file (mokhoa oa ho beha faele ka boeona ha o buuoe sehloohong sena):
Re amahanya faele ea media e ngolisitsoeng le sehlahisoa se tsamaisanang le eona ntle le ho tlamelloa lebenkeleng lefe kapa lefe. Ha ho hlake hore na hantle-ntle data ena e sebelisoa hokae le hore na ke hobane'ng ha ho ke ke ha khoneha ho fumana boitsebiso bo tsoang tafoleng e fetileng, empa tafole ena e teng 'me data e ngotsoe ho eona ha setšoantšo se eketsoa sehlahisoa. Ho joalo.
Faele ea media e ka sebelisoa ka likarolo tse fapaneng (khoutu ea tšobotsi e lumellanang e bonts'itsoe ka masakaneng):
Motheo (image)
Setšoantšo se senyenyane (small_image)
Setšoantšo se senyenyane (thumbnail)
Swatch Setšoantšo (swatch_image)
Ho hokahanya likarolo ho faele ea media ke sona hantle se etsahalang ho catalog_product_entity_varchar. Khoutu e tlamang e tšoana le khoutu e ho "Litšobotsi tsa mantlha tsa sehlahisoa".
Kamora ho eketsa setšoantšo ho sehlahisoa ho phanele ea admin e shebahala tjena:
Lihlopha
Litafole tse kholo tse nang le lintlha ka lihlopha:
catalog_category_entity: rejisetara ea lihlopha;
catalog_category_product: kamano pakeng tsa lihlahisoa le lihlopha;
catalog_category_entity_*: Litšobotsi tsa boleng ba EAV;
Qalong, ts'ebelisong e se nang letho ea Magento, ngoliso ea sehlopha e na le mekhahlelo e 2 (ke khutsufalitse mabitso a kholomo: crt - created_at, upd - updated_at):
Sehlopha se nang le id=1 ke motso oa lethathamo lohle la Magento mme ha se fumanehe ka har'a phanele ea tsamaiso kapa leqepheng le ka pele. Sehlopha se nang le id=2 (Sehlopha sa kamehla) ke karolo ea motso bakeng sa lebenkele la mantlha la sebaka (Lebenkele le ka Sehloohong la Webosaete) e entsoeng ha kopo e sebelisoa (bona. Tsamaiso / Mabenkele / Mabenkele Tsohle). Ho feta moo, sehlopha sa motso oa lebenkele ka boeona le sona ha se fumanehe ka pele, ke likaroloana tsa sona feela.
Kaha sehlooho sa sehlooho sena se ntse se kenya lintlha ka lihlahisoa, nke ke ka sebelisa ho kena ka ho toba ho database ha ke theha lihlopha, empa ke tla sebelisa lihlopha tse fanoeng ke Magento ka boeona (mehlala le li-repositories). Ho kena ka kotloloho sebakeng sa polokelo ea litaba ho sebelisoa feela ho amahanya sehlahisoa se tsoang kantle ho naha le sehlopha (sehlopha se tsamaisana le lebitso la sona, 'me id ea sehlopha e khutlisoa nakong ea ho bapisa):
Kamora ho kenyelletsa sehokelo sa sehlahisoa ho mekhahlelo ea "Sehlopha sa 1" le "Sehlopha sa 2", lintlha tsa sehlahisoa phanele ea tsamaiso li shebahala tjena:
Liketso tse ling
Hang ha tlhahiso ea data e phethiloe, u lokela ho tlatsa mehato e latelang:
data indexing: letsetsa ho console ./bin/magento indexer:reindex;
Lihlahisoa ho phanele ea admin kamora ho etsa liketso tse ling:
le ka pele:
Kakaretso
Sehlopha se tšoanang sa lihlahisoa (likotoana tse 10) joalo ka sehloohong se fetileng se romelloa bonyane taelo ea boholo ka potlako (1 motsotsoana ho ea ho 10). Ho lekanya lebelo ka nepo, o hloka palo e kholoanyane ea lihlahisoa - makholo a 'maloa, kapa ho feta likete tse molemo. Leha ho le joalo, leha re na le lintlha tse nyane joalo tsa tlhahiso, re ka fihlela qeto ea hore ts'ebeliso ea lisebelisoa tse fanoeng ke Magento (mehlala le polokelo) ke ea bohlokoa (ke hatisa - haholo!) potlakisa nts'etsopele ea ts'ebetso e hlokahalang, empa ka nako e ts'oanang haholo (ke hatisa - haholo!) fokotsa lebelo leo data e kenang ho database.
Ka lebaka leo, metsi a ile a fetoha metsi 'me sena ha se tšenolo. Leha ho le joalo, joale ke na le khoutu eo nka bapalang ka eona mme mohlomong ke fihlele liqeto tse ling tse khahlisang.