புரோஹோஸ்டர் > Блог > நிர்வாகம் > Magento 2: தயாரிப்புகளை நேரடியாக தரவுத்தளத்தில் இறக்குமதி செய்யவும்
Magento 2: தயாரிப்புகளை நேரடியாக தரவுத்தளத்தில் இறக்குமதி செய்யவும்
В முந்தைய கட்டுரை Magento 2 இல் தயாரிப்புகளை இறக்குமதி செய்யும் செயல்முறையை வழக்கமான முறையில் விவரித்தேன் - மாதிரிகள் மற்றும் களஞ்சியங்கள் மூலம். வழக்கமான முறையில் தரவு செயலாக்க வேகம் மிகக் குறைவு. எனது மடிக்கணினி வினாடிக்கு ஒரு பொருளை உற்பத்தி செய்து கொண்டிருந்தது. இந்த தொடர்ச்சியில், ஒரு தயாரிப்பை இறக்குமதி செய்வதற்கான மாற்று வழியை நான் கருதுகிறேன் - தரவுத்தளத்தில் நேரடியாக நுழைவதன் மூலம், நிலையான Magento 2 வழிமுறைகளை (மாதிரிகள், தொழிற்சாலைகள், களஞ்சியங்கள்) தவிர்த்து. தயாரிப்புகளை இறக்குமதி செய்வதற்கான படிகளின் வரிசையை MySQL உடன் வேலை செய்யக்கூடிய எந்த நிரலாக்க மொழிக்கும் மாற்றியமைக்க முடியும்.
பொறுப்புத் துறப்பு: Magento க்கான ஆயத்த செயல்பாடு உள்ளது தரவு இறக்குமதி மற்றும், பெரும்பாலும், அது உங்களுக்கு போதுமானதாக இருக்கும். இருப்பினும், உங்களிடம் உள்ளவற்றுக்கான CSV கோப்பைத் தயாரிப்பது மட்டும் இல்லாமல், இறக்குமதி செயல்முறையின் மீது உங்களுக்கு முழுமையான கட்டுப்பாடு தேவைப்பட்டால், பூனைக்கு வரவேற்கிறோம்.
இரண்டு கட்டுரைகளையும் எழுதுவதன் விளைவாக வரும் குறியீட்டை 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 அடாப்டரைப் பயன்படுத்துகிறேன்:
புதிதாகப் பதிவுசெய்யப்பட்ட தயாரிப்புக்கு இன்னும் பெயர் அல்லது விளக்கம் இல்லை. இவை அனைத்தும் மூலம் செய்யப்படுகிறது 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.3 இலிருந்து தொடங்கி, சரக்கு தகவலை (தயாரிப்பு அளவு) சேமிப்பதை வழங்கும் இரண்டு இணையான அட்டவணைகள் உள்ளன:
cataloginventory_*: பழைய அமைப்பு;
inventory_*: புதிய கட்டமைப்பு (MSI - பல மூல சரக்கு);
இரண்டு கட்டமைப்புகளுக்கும் நீங்கள் சரக்கு தரவைச் சேர்க்க வேண்டும், ஏனெனில் புதிய கட்டமைப்பு இன்னும் பழையவற்றிலிருந்து முற்றிலும் சுயாதீனமாக இல்லை (இது மிகவும் சாத்தியம் default புதிய கட்டமைப்பில் உள்ள கிடங்கு ஒரு அட்டவணை சம்பந்தப்பட்டது cataloginventory_stock_status என inventory_stock_1).
பட்டியல் பட்டியல்_
Magneto 2.3 ஐ பயன்படுத்தும்போது, முதலில் 2 உள்ளீடுகள் இருக்கும் store_website, இது இரண்டு தளங்களுக்கு ஒத்திருக்கிறது - நிர்வாக மற்றும் முக்கிய கிளையன்ட்:
அதாவது, நமது பழைய கட்டமைப்பில் ஒரே ஒரு "கிடங்கு" மட்டுமே உள்ளது (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):
«மூல» தயாரிப்புகளுக்கான இயற்பியல் சேமிப்பகத்தைக் குறிக்கிறது (பதிவில் இயற்பியல் ஒருங்கிணைப்புகள் மற்றும் அஞ்சல் முகவரி உள்ளது). "கிடங்கு"பல "ஆதாரங்களின்" தர்க்கரீதியான ஒன்றியம் (inventory_source_stock_link)
விற்பனை சேனலுக்கான இணைப்பு ஏற்படும் மட்டத்தில் (inventory_stock_sales_channel)
type |code|stock_id|
-------|----|--------|
website|base| 1|
தரவு கட்டமைப்பின் மூலம் ஆராயும்போது, பல்வேறு வகையான விற்பனை சேனல்கள் கருதப்படுகின்றன, ஆனால் முன்னிருப்பாக இணைப்பு மட்டுமே "பங்கு"-"வலைத்தளம்"(இணையதளத்திற்கான இணைப்பு இணையதளக் குறியீட்டைப் பின்பற்றுகிறது - base).
ஒன்று"கிடங்கில்"பலவற்றுடன் இணைக்க முடியும்"ஆதாரங்கள்"மற்றும் ஒன்று "மூல"- பலருக்கு"கிடங்குகள்"(பல-பல உறவு). விதிவிலக்குகள் இயல்புநிலை "மூல"மேலும்"கிடங்கில்". அவை மற்ற நிறுவனங்களுடன் மீண்டும் இணைக்கப்படவில்லை (குறியீடு மட்டத்தில் வரம்பு - பிழை "Default Source அல்லது Default Stock தொடர்பான இணைப்பைச் சேமிக்க முடியவில்லை"). Magento 2 இல் உள்ள MSI கட்டமைப்பைப் பற்றிய கூடுதல் விவரங்களைக் கட்டுரையில் காணலாம்.CQRS மற்றும் நிகழ்வு ஆதாரத்தைப் பயன்படுத்தி கிடங்கு மேலாண்மை அமைப்பு. வடிவமைப்பு".
நான் இயல்புநிலை உள்ளமைவைப் பயன்படுத்துவேன் மற்றும் அனைத்து சரக்கு தகவல்களையும் மூலத்தில் சேர்ப்பேன் default, இது குறியீட்டுடன் இணையதளத்துடன் தொடர்புடைய விற்பனை சேனலில் ஈடுபட்டுள்ளது base (கடையின் முன் முனையுடன் தொடர்புடையது - பார்க்கவும் store_website):
நிர்வாக குழுவில் உள்ள தயாரிப்பில் சரக்கு தரவைச் சேர்த்த பிறகு, நீங்கள் இந்தப் படத்தைப் பெறுவீர்கள்:
ஊடக
நிர்வாக குழு மூலம் ஒரு தயாரிப்பில் ஒரு படத்தை "கைமுறையாக" சேர்க்கும்போது, தொடர்புடைய தகவல்கள் பின்வரும் அட்டவணையில் எழுதப்படும்:
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, பட்டியலிலிருந்து தயாரிப்புகளை விவரிக்கும் போது மேடையில் அதை ஒரு படமாகப் பயன்படுத்தலாம்.
catalog_product_entity_media_gallery
பதிவு இடுகையிடப்பட்டது ./pub/media/catalog/product/ மீடியா கோப்பு (கோப்பை வைக்கும் செயல்முறை இந்த கட்டுரையில் விவாதிக்கப்படவில்லை):
பதிவுசெய்யப்பட்ட மீடியா கோப்பை எந்த கடை முகப்பிலும் இணைக்கப்படாமல் தொடர்புடைய தயாரிப்புடன் இணைக்கிறோம். இந்தத் தரவு சரியாக எங்கு பயன்படுத்தப்படுகிறது மற்றும் முந்தைய அட்டவணையில் இருந்து தரவை அணுகுவது ஏன் சாத்தியமில்லை என்பது தெளிவாகத் தெரியவில்லை, ஆனால் இந்த அட்டவணை உள்ளது மற்றும் தயாரிப்பில் ஒரு படம் சேர்க்கப்படும்போது தரவு அதில் எழுதப்படும். அதனால் அவ்வளவுதான்.
ஒரு மீடியா கோப்பை வெவ்வேறு பாத்திரங்களுடன் பயன்படுத்தலாம் (தொடர்புடைய பண்புக் குறியீடு அடைப்புக்குறிக்குள் குறிக்கப்படுகிறது):
அடித்தளம்(image)
சிறிய படம் (small_image)
சிறுபடம் (thumbnail)
ஸ்வாட்ச் படம் (swatch_image)
மீடியா கோப்புடன் பாத்திரங்களை இணைப்பது சரியாகவே நடக்கும் catalog_product_entity_varchar. பிணைப்புக் குறியீடு "" இல் உள்ள குறியீட்டைப் போன்றது.அடிப்படை தயாரிப்பு பண்புகள்".
நிர்வாக குழுவில் தயாரிப்புக்கு ஒரு படத்தைச் சேர்த்த பிறகு, இது போல் தெரிகிறது:
வகை
வகையின் அடிப்படையில் தரவைக் கொண்ட முக்கிய அட்டவணைகள்:
catalog_category_entity: வகைகளின் பதிவு;
catalog_category_product: தயாரிப்புகள் மற்றும் வகைகளுக்கு இடையிலான இணைப்பு;
catalog_category_entity_*: EAV பண்பு மதிப்புகள்;
ஆரம்பத்தில், வெற்று Magento பயன்பாட்டில், வகைப் பதிவேட்டில் 2 வகைகள் உள்ளன (நெடுவரிசைப் பெயர்களை நான் சுருக்கினேன்: crt - created_at, upd - updated_at):
id=1 உடன் உள்ள வகை முழு Magento பட்டியலின் ரூட் மற்றும் நிர்வாக குழு அல்லது முன் பக்கத்தில் கிடைக்காது. ஐடி=2 உடன் வகை (இயல்புநிலை வகை) என்பது பிரதான தளத்தின் பிரதான அங்காடிக்கான ரூட் வகை (முக்கிய இணையதள அங்காடி) பயன்பாடு பயன்படுத்தப்படும் போது உருவாக்கப்பட்டது (பார்க்க. நிர்வாகம் / கடைகள் / அனைத்து கடைகள்) மேலும், கடையின் மூல வகையும் முன்புறத்தில் இல்லை, அதன் துணைப்பிரிவுகள் மட்டுமே.
இந்த கட்டுரையின் தலைப்பு இன்னும் தயாரிப்புகளில் தரவை இறக்குமதி செய்வதால், வகைகளை உருவாக்கும் போது தரவுத்தளத்தில் நேரடி நுழைவைப் பயன்படுத்த மாட்டேன், ஆனால் Magento வழங்கிய வகுப்புகளைப் பயன்படுத்துவேன் (மாதிரிகள் மற்றும் களஞ்சியங்கள்). தரவுத்தளத்தில் நேரடி நுழைவு இறக்குமதி செய்யப்பட்ட தயாரிப்பை ஒரு வகையுடன் இணைக்க மட்டுமே பயன்படுத்தப்படுகிறது (வகை அதன் பெயரால் பொருந்துகிறது, மேலும் வகை ஐடி பொருத்தத்தின் போது மீட்டெடுக்கப்படுகிறது):
கூடுதல் செயல்களைச் செய்த பிறகு நிர்வாகக் குழுவில் உள்ள தயாரிப்புகள்:
மற்றும் முன்பக்கத்தில்:
சுருக்கம்
முந்தைய கட்டுரையில் உள்ள அதே தயாரிப்புகளின் தொகுப்பு (10 துண்டுகள்) குறைந்தபட்சம் ஒரு வரிசை அளவு வேகமாக இறக்குமதி செய்யப்படுகிறது (1 வினாடிக்கு எதிராக 10). வேகத்தை இன்னும் துல்லியமாக மதிப்பிட, உங்களுக்கு அதிக எண்ணிக்கையிலான தயாரிப்புகள் தேவை - பல நூறு, அல்லது இன்னும் ஆயிரக்கணக்கான. இருப்பினும், இவ்வளவு சிறிய அளவிலான உள்ளீட்டுத் தரவு இருந்தாலும், Magento (மாதிரிகள் மற்றும் களஞ்சியங்கள்) வழங்கிய கருவிகளின் பயன்பாடு குறிப்பிடத்தக்கது என்று நாம் முடிவு செய்யலாம் (நான் வலியுறுத்துகிறேன் - மிகவும்!) தேவையான செயல்பாட்டின் வளர்ச்சியை விரைவுபடுத்துகிறது, ஆனால் அதே நேரத்தில் கணிசமாக (நான் வலியுறுத்துகிறேன் - மிகவும்!) தரவுத்தளத்தில் தரவு வரும் வேகத்தைக் குறைக்கவும்.
இதன் விளைவாக, தண்ணீர் ஈரமாக மாறியது, இது ஒரு வெளிப்பாடு அல்ல. இருப்பினும், இப்போது என்னிடம் விளையாடுவதற்கான குறியீடு உள்ளது, மேலும் சில சுவாரஸ்யமான முடிவுகளுக்கு வரலாம்.