Magento getModel('catalog/product')->getCollection() avec addAttributeToSelect('*') ne retourne pas de description
J'ai code ci-dessous pour obtenir tous les produits de données de magento, mais il n'est pas de revenir me le champ description. Je suis le seul à en arriver short_description. En fait,son manque plusieurs champs, en plus de la description. En tout cas voici le code:
$collection = Mage::getModel('catalog/product')->getCollection()
->joinField(
'qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'
)
->addAttributeToFilter('status', 1) //enabled
->addUrlRewrite()
->addPriceData()
->addStoreFilter($store_id)
->addAttributeToSelect('*');
Mage::getSingleton('catalog/product_status')->addSaleableFilterToCollection($collection);
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
$collection->setOrder('sku', 'desc');
Cela crée la requête suivante quand je var_dump:
SELECT 1 AS `status`, `e`.`entity_id`, `e`.`type_id`, `e`.`attribute_set_id`, `at_qty`.`qty`, `price_index`.`price`, `price_index`.`tax_class_id`, `price_index`.`final_price`, IF(price_index.tier_price IS NOT NULL, LEAST(price_index.min_price, price_index.tier_price), price_index.min_price) AS `minimal_price`, `price_index`.`min_price`, `price_index`.`max_price`, `price_index`.`tier_price`, `e`.`entity_id`, `e`.`attribute_set_id`, `e`.`type_id`, `e`.`allow_open_amount`, `e`.`cost`, `e`.`created_at`, `e`.`email_template`, `e`.`enable_googlecheckout`, `e`.`giftcard_amounts`, `e`.`giftcard_type`, `e`.`gift_message_available`, `e`.`gift_wrapping_available`, `e`.`gift_wrapping_price`, `e`.`has_options`, `e`.`image_label`, `e`.`is_recurring`, `e`.`is_redeemable`, `e`.`lifetime`, `e`.`links_exist`, `e`.`links_purchased_separately`, `e`.`links_title`, `e`.`msrp`, `e`.`msrp_display_actual_price_type`, `e`.`msrp_enabled`, `e`.`name`, `e`.`news_from_date`, `e`.`news_to_date`, `e`.`open_amount_max`, `e`.`open_amount_min`, `e`.`price`, `e`.`price_type`, `e`.`price_view`, `e`.`recurring_profile`, `e`.`required_options`, `e`.`shipment_type`, `e`.`short_description`, `e`.`sku`, `e`.`sku_type`, `e`.`small_image`, `e`.`small_image_label`, `e`.`special_from_date`, `e`.`special_price`, `e`.`special_to_date`, `e`.`tax_class_id`, `e`.`thumbnail`, `e`.`thumbnail_label`, `e`.`updated_at`, `e`.`url_key`, `e`.`url_path`, `e`.`use_config_email_template`, `e`.`use_config_is_redeemable`, `e`.`use_config_lifetime`, `e`.`visibility`, `e`.`weight`, `e`.`weight_type`, `e`.`brand`, `e`.`brand_value`, `e`.`new_in`, `e`.`new_in_value`, `e`.`amconf_simple_price`, `e`.`volume_weight`, `e`.`product_3rd_type`, `e`.`product_3rd_type_value`, `e`.`product_sub_type`, `e`.`product_sub_type_value`, `e`.`product_type`, `e`.`product_type_value`, `e`.`parent_sku`, `at_inventory_in_stock`.`is_in_stock` AS `inventory_in_stock` FROM `catalog_product_flat_1` AS `e`
LEFT JOIN `cataloginventory_stock_item` AS `at_qty` ON (at_qty.`product_id`=e.entity_id) AND (at_qty.stock_id=1)
INNER JOIN `catalog_product_index_price` AS `price_index` ON price_index.entity_id = e.entity_id AND price_index.website_id = '1' AND price_index.customer_group_id = 0
INNER JOIN `cataloginventory_stock_item` AS `at_inventory_in_stock` ON (at_inventory_in_stock.`product_id`=e.entity_id) AND ((at_inventory_in_stock.use_config_manage_stock = 0 AND at_inventory_in_stock.manage_stock=1 AND at_inventory_in_stock.is_in_stock=1) OR (at_inventory_in_stock.use_config_manage_stock = 0 AND at_inventory_in_stock.manage_stock=0) OR (at_inventory_in_stock.use_config_manage_stock = 1 AND at_inventory_in_stock.is_in_stock=1))
Il est donc uniquement short_description mais je n'ai aucune idée de pourquoi la description n'est pas là.
Je sais que je peux faire
Mage::getModel('catalog/product')->load($product->getId())
Mais je ne veux pas de requête de la DB nombre de fois. Est-il moyen de contourner ce ou obtenir ces champs lorsque je ne getCollection()?
Mise à jour: Il semble que mon principal problème est, je suis en obtenant seulement les champs requis lorsque je lance le premier code. Dans la section où je me $collection
je veux inclure des champs supplémentaires dans la page de description du produit. Quel serait le code pour que, sans faire de charge pour chaque produit?
OriginalL'auteur erincerol | 2014-10-28
Vous devez vous connecter pour publier un commentaire.
Magento ne charge pas tous les attributs lors de l'utilisation du modèle de collection de ce genre,
C'est la sélection de la table
Magento à l'aide de l'orm tables. Si nous creusons plus dans ce,
Maintenant, vous pouvez voir les cahiers seront en cours d'exécution.
Pour plus de détails, s'il vous plaît aller ici
Mais vous pouvez obtenir tous les détails du produit de la collecte de table à plat sans interrogation de plusieurs temps de base de données . Pour cela, vous devez activer le plat dans
admin-> system->configuration ->catalog->catalog-> Front end->
Ici vous pouvez voir les options pour activer plat catalogue
Pour plus de détails sur plat catalogue s'il vous plaît aller ici.
Maintenant, vous voyez la requête maintenant, il va l'aimer,
SELECT 1 AS
status
,e
.entity_id
,e
.type_id
,e
.attribute_set_id
,e
.entity_id
,e
.attribute_set_id
,e
.type_id
,e
.allow_open_amount
,e
.cost
,e
.created_at
,e
.email_template
,e
.enable_googlecheckout
,e
.giftcard_amounts
,e
.giftcard_type
,e
.gift_message_available
,e
.gift_wrapping_available
,e
.gift_wrapping_price
,e
.has_options
,e
.image_label
,e
.is_recurring
,e
.is_redeemable
,e
.lifetime
,e
.links_exist
,e
.links_purchased_separately
,e
.links_title
,e
.msrp
,e
.msrp_display_actual_price_type
,e
.msrp_enabled
,e
.name
,e
.news_from_date
,e
.news_to_date
,e
.open_amount_max
,e
.open_amount_min
,e
.price
,e
.price_type
,e
.price_view
,e
.recurring_profile
,e
.required_options
,e
.shipment_type
,e
.short_description
,e
.sku
,e
.sku_type
,e
.small_image
,e
.small_image_label
,e
.special_from_date
,e
.special_price
,e
.special_to_date
,e
.tax_class_id
,e
.thumbnail
,e
.thumbnail_label
,e
.updated_at
,e
.url_key
,e
.url_path
,e
.use_config_email_template
,e
.use_config_is_redeemable
,e
.use_config_lifetime
,e
.visibility
,e
.weight
,e
.weight_type
,e
.necklace_length
,e
.necklace_length_value
DEcatalog_product_flat_1
COMMEe
Mais n'oubliez pas que certaines méthodes ne sont pas disponibles dans le plat de catalogue et aussi si il est désactivé.
OriginalL'auteur Elavarasan
Veuillez essayer de définir des attributs des produits pour
description
champ "Used in Product Listing
" à "YES
". Qui permettra de résoudre votre problème et à éviter que des personnes de modèle du produit de la charge.Mais assurez-vous que, après ce changement d'attribut que vous avez à ré indexer les données.
short_description
comme l'exige etdescription
ne l'est pas. J'ai besoin de trouver un moyen de les inclure dans ma première requête.OriginalL'auteur Keyur Shah