Μετάβαση στο περιεχόμενο
Πίσω στα Άρθρα

Products, Combinations και Stock στο PrestaShop: πώς συνδέονται πραγματικά

Product exports, ERP integrations & stock sync
SQL
SELECT
p.id_product,
p.reference,
sa.quantity
FROM ps_product p
JOIN ps_stock_available sa
ON sa.id_product = p.id_product
WHERE p.active = 1;
Data & Database
Intermediate
PrestaHacks 4 min read

Το request ακούγεται απλό:

“Θέλω όλα τα προϊόντα με SKU και stock.”

Μετά ανοίγεις τη database ή το Webservice και ανακαλύπτεις ότι ένα product μπορεί να έχει combinations, το πραγματικό SKU μπορεί να είναι variant-level και το stock βρίσκεται σε διαφορετικό entity.

1. Simple product

TEXT
ps_product
    │
    │ id_product
    ↓
ps_stock_available

Για simple product:

TEXT
id_product_attribute = 0

2. Product με combinations

TEXT
ps_product
      │
      │ id_product
      ↓
ps_product_attribute
      │
      │ id_product_attribute
      ↓
ps_stock_available

3. Πού βρίσκονται τα attributes;

TEXT
ps_product_attribute
          │
          ↓
ps_product_attribute_combination
          │
          ↓
ps_attribute
          │
          ↓
ps_attribute_lang

4. Παράδειγμα catalogue

TEXT
PRODUCT
Basic T-Shirt
id_product: 42
reference: TSHIRT-BASIC
TEXT
101 → TSHIRT-BLK-S
102 → TSHIRT-BLK-M
103 → TSHIRT-BLK-L

5. Πού βρίσκεται πραγματικά το stock;

Simple product:

TEXT
id_product = 42
id_product_attribute = 0
quantity = 19

Combination:

TEXT
id_product = 42
id_product_attribute = 103
quantity = 7

6. Query για simple products και stock

SQL
SELECT
    p.id_product,
    p.reference,
    pl.name,
    sa.quantity
FROM ps_product p
INNER JOIN ps_product_lang pl
    ON pl.id_product = p.id_product
    AND pl.id_lang = 1
    AND pl.id_shop = 1
LEFT JOIN ps_stock_available sa
    ON sa.id_product = p.id_product
    AND sa.id_product_attribute = 0
WHERE p.active = 1;

7. Query για combination stock

SQL
SELECT
    p.id_product,
    pl.name AS product_name,
    pa.id_product_attribute,
    pa.reference AS combination_reference,
    sa.quantity
FROM ps_product p
INNER JOIN ps_product_lang pl
    ON pl.id_product = p.id_product
    AND pl.id_lang = 1
    AND pl.id_shop = 1
INNER JOIN ps_product_attribute pa
    ON pa.id_product = p.id_product
LEFT JOIN ps_stock_available sa
    ON sa.id_product = pa.id_product
    AND sa.id_product_attribute = pa.id_product_attribute
WHERE p.active = 1
ORDER BY p.id_product, pa.id_product_attribute;

8. Γιατί το product-only export μπορεί να είναι λάθος

TEXT
Basic T-Shirt | TSHIRT-BASIC | 19.90

έναντι:

TEXT
Basic T-Shirt / Black / S | TSHIRT-BLK-S | 19.90 | 4
Basic T-Shirt / Black / M | TSHIRT-BLK-M | 19.90 | 8
Basic T-Shirt / Black / L | TSHIRT-BLK-L | 19.90 | 7

9. Product-level ή combination-level identifier;

Parent:

TEXT
ONE ROW PER PRODUCT

Variant:

TEXT
ONE ROW PER COMBINATION

10. EAN / UPC / MPN

Τα combinations μπορούν να έχουν δικά τους identification fields.

11. Webservice mental model

TEXT
/api/products
       │
       ↓
/api/combinations
       │
       ↓
/api/stock_availables
       │
       ↓
available stock

12. Multistore

Σε multistore setup το stock έχει και shop context.

13. Γράψε πρώτα το dataset specification

TEXT
ONE ROW PER:
Combination

FIELDS:
Product ID
Combination ID
Product name
Combination reference
EAN
Price
Stock

LANGUAGE:
Greek

SHOP:
Shop 1

14. Άλλες production αποφάσεις

Πρέπει να οριστούν price/tax context, specific prices, categories, images, language, shop, currency και supplier reference.

15. Το mental model

TEXT
PRODUCT
   │
   ├── Product-level data
   │
   └── COMBINATIONS
          │
          ├── Variant SKU / EAN / impacts
          │
          └── STOCK AVAILABLE
Screenshot Placeholder 01 MEDIA TO ADD

Product page στο Back Office με combinations και διαφορετικές quantities ανά variant.

Official references

  • https://devdocs.prestashop-project.org/9/faq/stock/
  • https://devdocs.prestashop-project.org/9/webservice/resources/products/
  • https://devdocs.prestashop-project.org/9/webservice/resources/combinations/
  • https://devdocs.prestashop-project.org/9/webservice/resources/stock_availables/

Πού να συνεχίσεις

Χρησιμοποίησε αυτό το relationship model για catalogue reports με ξεκάθαρα SQL joins. Για API writes, κράτησε την ίδια διάκριση product/combination στο ασφαλές Webservice update workflow.

ΜΕΙΝΕ ΕΝΗΜΕΡΩΜΕΝΟΣ

Πρακτικά PrestaShop hacks κατευθείαν στο inbox σου.

ΑΝΕΝΕΡΓΟ