2015-10-14 5 views
-1

Мне нужно получить конкретные данные из таблиц базы данных в Magento v1.9.2.1. Я могу найти таблицы продуктов, но я не уверен, где найти конкретные данные.Magento v1.9.2.1 Таблица продуктов

У меня есть настольное приложение, которое должно отображаться точно те же данные при просмотре конкретного продукта в Magento

Эти данные я ищу в базе данных Magento - SKU, Название продукта, Цена, Фото , Краткое описание, длинное описание

Мне сложно понять структуру базы данных. Я бы очень признателен, если кто-нибудь может помочь мне найти данные

ответ

1

Это может помочь вам приступить к работе. Я использую LINQPad, чтобы иметь возможность кодировать C# против моей базы данных Magneto. Это позволяет мне написать код высокого уровня с базой данных, но все же видеть основные запросы, которые генерируются.

У меня есть запрос, который производит этот результат для меня:

+-----+-----+-------+---------------+-------------------+-----------------+ 
| sku | qty | price | special_price | special_from_date | special_to_date | 
+-----+-----+-------+---------------+-------------------+-----------------+ 
| X1 | 5 | 13.99 | 8.99   | 2015-04-19 00:00 |     | 
| X2 | 12 | 10.99 | 7.99   | 2015-04-19 00:00 |     | 
| X3 | 9 | 9.99 | 5.99   | 2015-04-19 00:00 |     | 
+-----+-----+-------+---------------+-------------------+-----------------+ 

Вот (немного упрощенный) C# запроса для этих данных:

var items = 
    from x in catalog_product_entity 
    join stock in cataloginventory_stock_item on x.entity_id equals stock.product_id 
    join price in catalog_product_entity_decimal.Where(_ => _.attribute_id == 75 && _.store_id == 0) on x.entity_id equals price.entity_id into prices 
    join special_price in catalog_product_entity_decimal.Where(_ => _.attribute_id == 76 && _.store_id == 0) on x.entity_id equals special_price.entity_id into special_prices 
    join special_from_date in catalog_product_entity_datetime.Where(_ => _.attribute_id == 77 && _.store_id == 0) on x.entity_id equals special_from_date.entity_id into special_from_dates 
    join special_to_date in catalog_product_entity_datetime.Where(_ => _.attribute_id == 78 && _.store_id == 0) on x.entity_id equals special_to_date.entity_id into special_to_dates 
    select new 
    { 
     x.sku, 
     stock.qty, 
     prices, 
     special_prices, 
     special_from_dates, 
     special_to_dates, 
    }; 

Это производит эта фактическая SQL вызовов к БД :

SELECT t2.entity_id, t2.attribute_id, t2.entity_type_id, t2.store_id, t2.value, t2.value_id 
FROM catalog_product_entity AS t0 
INNER JOIN cataloginventory_stock_item AS t1 
    ON (t0.entity_id = t1.product_id) 
LEFT OUTER JOIN catalog_product_entity_decimal AS t2 
    ON (((t2.attribute_id = 75) AND (t2.store_id = 0)) AND (t2.entity_id = t0.entity_id)) 

SELECT t2.entity_id, t2.attribute_id, t2.entity_type_id, t2.store_id, t2.value, t2.value_id 
FROM catalog_product_entity AS t0 
INNER JOIN cataloginventory_stock_item AS t1 
    ON (t0.entity_id = t1.product_id) 
LEFT OUTER JOIN catalog_product_entity_decimal AS t2 
    ON (((t2.attribute_id = 76) AND (t2.store_id = 0)) AND (t2.entity_id = t0.entity_id)) 

SELECT t2.entity_id, t2.attribute_id, t2.entity_type_id, t2.store_id, t2.value, t2.value_id 
FROM catalog_product_entity AS t0 
INNER JOIN cataloginventory_stock_item AS t1 
    ON (t0.entity_id = t1.product_id) 
LEFT OUTER JOIN catalog_product_entity_datetime AS t2 
    ON (((t2.attribute_id = 77) AND (t2.store_id = 0)) AND (t2.entity_id = t0.entity_id)) 

SELECT t2.entity_id, t2.attribute_id, t2.entity_type_id, t2.store_id, t2.value, t2.value_id 
FROM catalog_product_entity AS t0 
INNER JOIN cataloginventory_stock_item AS t1 
    ON (t0.entity_id = t1.product_id) 
LEFT OUTER JOIN catalog_product_entity_datetime AS t2 
    ON (((t2.attribute_id = 78) AND (t2.store_id = 0)) AND (t2.entity_id = t0.entity_id)) 

SELECT t0.sku, t1.qty, t0.entity_id 
FROM catalog_product_entity AS t0 
INNER JOIN cataloginventory_stock_item AS t1 
    ON (t0.entity_id = t1.product_id) 

Теперь, вы должны знать, что attribute_id значения для вашей базы данных.

Я использую этот C# запрос для этого:

var query = 
    from et in eav_entity_type 
    where et.entity_model == "catalog/product" 
    join a in eav_attribute on et.entity_type_id equals a.entity_type_id 
    select new 
    { 
     a.attribute_id, 
     a.attribute_code, 
     a.backend_type 
    }; 

который переводит на этот SQL:

SELECT t1.attribute_id, t1.attribute_code, t1.backend_type 
FROM eav_entity_type AS t0 
INNER JOIN eav_attribute AS t1 
    ON (t0.entity_type_id = t1.entity_type_id) 
WHERE (t0.entity_model = @p0) 
-- p0 = [catalog/product] 

Это дает мне такой результат:

+--------------+------------------------+--------------+ 
| attribute_id |  attribute_code  | backend_type | 
+--------------+------------------------+--------------+ 
|   108 | category_ids   | static  | 
|   92 | color     | int   | 
|   79 | cost     | decimal  | 
|   117 | country_of_manufacture | varchar  | 
|   115 | created_at    | static  | 
|   103 | custom_design   | varchar  | 
|   104 | custom_design_from  | datetime  | 
|   105 | custom_design_to  | datetime  | 
|   106 | custom_layout_update | text   | 
|   72 | description   | text   | 
+--------------+------------------------+--------------+ 

Затем вы используете бэкэнд-тип для создания флагов SQL-кода LEFT OUTER JOIN catalog_product_entity_datetime AS t2 ON (((t2.attribute_id = 78).

Смежные вопросы