Php Magento:以编程方式获取产品列表
我正在尝试从我的Magento商店获取产品列表,每个产品只需加载三个属性,我想,这比加载整个产品所需的时间要少得多。现在,要么我做得不对,要么我错了。这是我的剧本:Php Magento:以编程方式获取产品列表,php,magento,Php,Magento,我正在尝试从我的Magento商店获取产品列表,每个产品只需加载三个属性,我想,这比加载整个产品所需的时间要少得多。现在,要么我做得不对,要么我错了。这是我的剧本: <?php $script_start = microtime(true); // Load Magento core require_once '../app/Mage.php'; Mage::app(); // Load products :: collection $query_create_start = mic
<?php
$script_start = microtime(true);
// Load Magento core
require_once '../app/Mage.php';
Mage::app();
// Load products :: collection
$query_create_start = microtime(true);
$prod_catalog = Mage::getModel("catalog/product")->getCollection()->
addAttributeToSelect('sku')->
addAttributeToSelect('name')->
addAttributeToSelect('category_ids');
$query_create_end = microtime(true);
$query_create_time = $query_create_end - $query_create_start;
echo "Query creation took $query_create_time seconds.<br>";
$product_loop_start = microtime(true);
foreach($prod_catalog as $product) {
var_dump($product);
$one_product_loop = microtime(true);
$one_product_time = $one_product_loop - $product_loop_start;
echo "Getting one product took $one_product_time seconds.<";
die('done');
}
$product_loop_end = microtime(true);
?>
现在,当我查看产品var_dump时,我发现它加载了比我要求的更多的属性:
object(Mage_Catalog_Model_Product)#74 (32) {
["_cacheTag":protected]=>
string(15) "catalog_product"
["_eventPrefix":protected]=>
string(15) "catalog_product"
["_eventObject":protected]=>
string(7) "product"
["_canAffectOptions":protected]=>
bool(false)
["_typeInstance":protected]=>
NULL
["_typeInstanceSingleton":protected]=>
NULL
["_linkInstance":protected]=>
NULL
["_customOptions":protected]=>
array(0) {
}
["_urlModel":protected]=>
NULL
["_errors":protected]=>
array(0) {
}
["_optionInstance":protected]=>
NULL
["_options":protected]=>
array(0) {
}
["_reservedAttributes":protected]=>
NULL
["_isDuplicable":protected]=>
bool(true)
["_calculatePrice":protected]=>
bool(true)
["_defaultValues":protected]=>
array(0) {
}
["_storeValuesFlags":protected]=>
array(0) {
}
["_lockedAttributes":protected]=>
array(0) {
}
["_isDeleteable":protected]=>
bool(true)
["_isReadonly":protected]=>
bool(false)
["_resourceName":protected]=>
string(15) "catalog/product"
["_resource":protected]=>
NULL
["_resourceCollectionName":protected]=>
string(26) "catalog/product_collection"
["_dataSaveAllowed":protected]=>
bool(true)
["_isObjectNew":protected]=>
NULL
["_data":protected]=>
array(12) {
["entity_id"]=>
string(1) "7"
["entity_type_id"]=>
string(1) "4"
["attribute_set_id"]=>
string(1) "4"
["type_id"]=>
string(6) "simple"
["sku"]=>
string(10) "1000000000"
["has_options"]=>
string(1) "0"
["required_options"]=>
string(1) "0"
["created_at"]=>
string(19) "2016-07-11 11:05:03"
["updated_at"]=>
string(19) "2017-03-03 21:14:21"
["name"]=>
string(62) "My simple product"
["is_salable"]=>
string(1) "1"
["stock_item"]=>
object(Varien_Object)#49 (7) {
["_data":protected]=>
array(1) {
["is_in_stock"]=>
string(1) "1"
}
["_hasDataChanges":protected]=>
bool(false)
["_origData":protected]=>
NULL
["_idFieldName":protected]=>
NULL
["_isDeleted":protected]=>
bool(false)
["_oldFieldsMap":protected]=>
array(0) {
}
["_syncFieldsMap":protected]=>
array(0) {
}
}
}
["_hasDataChanges":protected]=>
bool(true)
["_origData":protected]=>
NULL
["_idFieldName":protected]=>
string(9) "entity_id"
["_isDeleted":protected]=>
bool(false)
["_oldFieldsMap":protected]=>
array(0) {
}
["_syncFieldsMap":protected]=>
array(0) {
}
}
有什么想法吗?您可以尝试使用
Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId、$atributeCode、$storeId)
来代替getCollection()
,这可能会更快地满足您的需要 您已启用展开产品。
平面产品索引器生成的平面表仅包含活动产品。
这是出于性能原因。没有必要索引禁用的产品,因为您不打算在前端使用它们。(平板仅用于前端)
如果您试图在自定义脚本中获取产品,并且需要获取禁用的产品,那么您可以这样做
$collection=Mage::getResourceModel('catalog/product_collection')
->…在此添加筛选器。当系统加载一个产品时,默认情况下将加载所有静态属性 静态属性存储在主实体表“catalog\u product\u entity”中,其他属性根据该属性的backen\u类型存储在相关表中。例如,“name”存储在“catalog\u product\u entity\u varchar”中 addAttributeToSelect方法只影响非静态属性,因此在您的例子中,您可以看到许多已加载的静态属性 您可以尝试以下代码:
$prod_catalog = Mage::getModel("catalog/product")->getCollection();
$prod_catalog->getSelect()->reset("columns")->columns(array("sku","entity_id"));
$prod_catalog->addAttributeToSelect('name');
foreach($prod_catalog as $product) {
$category_ids = $product->getCategroyIds();
###you code
}
提示:虽然category_ID是静态的,但主实体表和其他产品实体表中没有列,因此运行addAttributeToSelect(“category_ID”)或add to columns函数没有意义,category ID数据来自另一个表category_product”)不,我没有使用平面表。如果是,它将抛出一个错误,因为addAttributeToSelect()在平面上不起作用。
$prod_catalog = Mage::getModel("catalog/product")->getCollection();
$prod_catalog->getSelect()->reset("columns")->columns(array("sku","entity_id"));
$prod_catalog->addAttributeToSelect('name');
foreach($prod_catalog as $product) {
$category_ids = $product->getCategroyIds();
###you code
}