フィルターや制限なしで、magento製品コレクション全体を取得しようとしていますが、すべての製品を取得できません。
私はすでにさまざまな方法を試しましたが、それらはすべて非常に限られた製品の選択肢を与えてくれます。ストアに5000の商品が含まれているが、500しか表示されていないとします。カタログをチェックすると、商品がリスト全体に表示されます。
Mage::getModel('catalog/product')->getCollection();
Mage::getResourceModel('catalog/product_collection')->addAttributeToSelect('*');
Mage::getModel("catalog/product")->getResourceCollection()->load();
それらはすべて同じ量(500)を返しますが、5000個の製品が得られると思います。私はZendやPHPを使用せず、Magentoの方法を使用してそれらを取得することを好みます。
誰もが本当にすべての製品を入手する方法を知っていますか、これがうまくいかない理由を正しい方向に私に向けることができますか?
返される選択文字列は次のとおりです。
SELECT 1 AS `status`, `e`.`entity_id`, `e`.`type_id`, `e`.`attribute_set_id` FROM `catalog_product_flat_4` AS `e`
ここにいくつかの可能性があります:1.全部で500のようないくつかの内部制限。 2.ページングの制限。ページあたりの製品数(db抽象)3.レイジーロードの制限。
たぶん、問題があるのかもしれませんが、これは内なる限界だと思います。
//to overwrite limit but you need first to increase your memory limit
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*') // select all attributes
->setPageSize(5000) // limit number of results returned
->setCurPage(1); // set the offset (useful for pagination)
// we iterate through the list of products to get attribute values
foreach ($collection as $product) {
echo $product->getName(); //get name
echo (float) $product->getPrice(); //get price as cast to float
echo $product->getDescription(); //get description
echo $product->getShortDescription(); //get short description
echo $product->getTypeId(); //get product type
echo $product->getStatus(); //get product status
// getCategoryIds(); returns an array of category IDs associated with the product
foreach ($product->getCategoryIds() as $category_id) {
$category = Mage::getModel('catalog/category')->load($category_id);
echo $category->getName();
echo $category->getParentCategory()->getName(); // get parent of category
}
//gets the image url of the product
echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).
'catalog/product'.$product->getImage();
echo $product->getSpecialPrice();
echo $product->getProductUrl(); //gets the product url
echo '<br />';
}
そして、このようなもの:
$products = Mage::getModel('catalog/product')->getCollection();
foreach($products as $prod) {
$product = Mage::getModel('catalog/product')->load($prod->getId());
}
この方法で500を超えるが、すべての製品が...
Admin> system> configuration> catalog> catalogでflat_catalog_productをオフにします。この後、完全な製品コレクションを取得します。これは回避策ですが、必要なことを達成するのに役立ちました。
フラットカタログプロダクトストラクチャーを使用している可能性があります。これにより、ストアビューごとに個別のテーブルが作成されます。
以下のコードを使用してSQLクエリを出力します。あなたはコレクションがのようなフラットテーブルから来ていることがわかります
catalog_product_flat_38
echo Mage::getModel('catalog/product')->getCollection()->getSelect();