Magento 2: εισαγωγή προϊόντων απευθείας στη βάση δεδομένων

В προηγούμενο άρθρο Περιέγραψα τη διαδικασία εισαγωγής προϊόντων στο Magento 2 με τον συνηθισμένο τρόπο - μέσω μοντέλων και αποθετηρίων. Η συνήθης μέθοδος έχει πολύ χαμηλή ταχύτητα επεξεργασίας δεδομένων. Ο φορητός υπολογιστής μου έβγαζε περίπου ένα προϊόν ανά δευτερόλεπτο. Σε αυτή τη συνέχεια, θεωρώ έναν εναλλακτικό τρόπο εισαγωγής ενός προϊόντος - με απευθείας είσοδο στη βάση δεδομένων, παρακάμπτοντας τους τυπικούς μηχανισμούς Magento 2 (μοντέλα, εργοστάσια, αποθετήρια). Η ακολουθία βημάτων για την εισαγωγή προϊόντων μπορεί να προσαρμοστεί σε οποιαδήποτε γλώσσα προγραμματισμού που μπορεί να λειτουργήσει με τη MySQL.

Αποποίηση ευθυνών: Το Magento διαθέτει έτοιμη λειτουργικότητα για εισαγωγή δεδομένων και, πιθανότατα, θα είναι αρκετό για εσάς. Ωστόσο, εάν χρειάζεστε πιο ολοκληρωμένο έλεγχο στη διαδικασία εισαγωγής, χωρίς να περιορίζεται στην προετοιμασία ενός αρχείου CSV για αυτό που έχετε, καλώς ήρθατε στο cat.

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 — αν δεν το προσδιορίσουμε, τότε θα χρησιμοποιηθεί το «απλό».

Για να γράψω απευθείας στη βάση δεδομένων, χρησιμοποιώ τον προσαρμογέα DB του ίδιου του Magento:

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: εισαγωγή προϊόντων απευθείας στη βάση δεδομένων

Δεδομένα αποθέματος

Ξεκινώντας από την έκδοση 2.3 στο Magento, υπάρχουν δύο παράλληλα σύνολα πινάκων που παρέχουν αποθήκευση πληροφοριών αποθέματος (ποσότητα προϊόντος):

  • cataloginventory_*: παλιά δομή;
  • inventory_*: νέα δομή (MSI - Απόθεμα πολλαπλών πηγών);

Πρέπει να προσθέσετε δεδομένα αποθέματος και στις δύο δομές, γιατί η νέα δομή δεν είναι ακόμη εντελώς ανεξάρτητη από την παλιά (είναι πολύ πιθανό ότι για default αποθήκη στη νέα δομή εμπλέκεται ένας πίνακας cataloginventory_stock_status ως inventory_stock_1).

κατάλογος απογραφή_

Κατά την ανάπτυξη του Magneto 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).

Ενας "αποθήκη"μπορεί να συνδεθεί με πολλά"πηγές"και ένα "πηγή"- σε αρκετούς"αποθήκες«(σχέση πολλά-προς-πολλά). Οι εξαιρέσεις είναι προεπιλεγμένες "πηγή"Και"αποθήκη". Δεν επανασυνδέονται με άλλες οντότητες (περιορισμός σε επίπεδο κώδικα - το σφάλμα "Δεν είναι δυνατή η αποθήκευση συνδέσμου που σχετίζεται με την προεπιλεγμένη πηγή ή την προεπιλεγμένη μετοχή"). Περισσότερες λεπτομέρειες σχετικά με τη δομή MSI στο Magento 2 μπορείτε να βρείτε στο άρθρο "Σύστημα διαχείρισης αποθήκης με χρήση CQRS και Event Sourcing. Σχέδιο".

Θα χρησιμοποιήσω την προεπιλεγμένη διαμόρφωση και θα προσθέσω όλες τις πληροφορίες αποθέματος στην πηγή 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 εικόνας (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 (προεπιλογή Κατηγορία) είναι η ριζική κατηγορία για το κεντρικό κατάστημα του κύριου ιστότοπου (Κύριο Κατάστημα Ιστοσελίδας) δημιουργείται κατά την ανάπτυξη της εφαρμογής (βλ. Διαχειριστής / Καταστήματα / Όλα τα καταστήματα). Επιπλέον, η βασική κατηγορία του ίδιου του καταστήματος δεν είναι επίσης διαθέσιμη στο μπροστινό μέρος, παρά μόνο οι υποκατηγορίες του.

Δεδομένου ότι το θέμα αυτού του άρθρου εξακολουθεί να είναι η εισαγωγή δεδομένων για προϊόντα, δεν θα χρησιμοποιήσω την απευθείας είσοδο στη βάση δεδομένων κατά τη δημιουργία κατηγοριών, αλλά θα χρησιμοποιήσω τις κλάσεις που παρέχονται από το ίδιο το 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/regenere-catalog-urls«

Προϊόντα στον πίνακα διαχείρισης μετά την εκτέλεση πρόσθετων ενεργειών:

Magento 2: εισαγωγή προϊόντων απευθείας στη βάση δεδομένων

και στο μπροστινό μέρος:

Magento 2: εισαγωγή προϊόντων απευθείας στη βάση δεδομένων

Περίληψη

Το ίδιο σύνολο προϊόντων (10 τεμάχια) όπως στο προηγούμενο άρθρο εισάγεται τουλάχιστον κατά μια τάξη μεγέθους ταχύτερα (1 δευτερόλεπτο έναντι 10). Για να εκτιμήσετε με μεγαλύτερη ακρίβεια την ταχύτητα, χρειάζεστε μεγαλύτερο αριθμό προϊόντων - αρκετές εκατοντάδες ή ακόμα καλύτερα χιλιάδες. Ωστόσο, ακόμη και με τόσο μικρό μέγεθος δεδομένων εισόδου, μπορούμε να συμπεράνουμε ότι η χρήση των εργαλείων που παρέχει το Magento (μοντέλα και αποθετήρια) είναι σημαντική (τονίζω - πολύ!) επιταχύνετε την ανάπτυξη της απαιτούμενης λειτουργικότητας, αλλά ταυτόχρονα σημαντικά (τονίζω - πολύ!) μειώστε την ταχύτητα με την οποία τα δεδομένα εισέρχονται στη βάση δεδομένων.

Ως αποτέλεσμα, το νερό αποδείχθηκε υγρό και αυτό δεν είναι αποκάλυψη. Ωστόσο, τώρα έχω τον κώδικα για να παίξω και ίσως να καταλήξω σε κάποια πιο ενδιαφέροντα συμπεράσματα.

Πηγή: www.habr.com