Magento 1.9 在从多个商店获取 productcollection 时使用错误的平面 table
Magento 1.9 using wrong flat table when getting productcollection from multiple stores
我有一个 Magento 1.9 安装,有 4 个商店(2 个网站,每个网站有 2 个商店)。对于出口,我需要按商店获取所有产品。
这就是我尝试的方法:
/** @var Mage_Core_Model_Store[] */
$stores = Mage::app()->getStores();
foreach ($stores as $store) {
if (!$store->getIsActive()) {
continue;
}
Mage::app()->setCurrentStore($store);
/** @var Mage_Catalog_Model_Resource_Product_Collection */
$productCollection = Mage::getModel('catalog/product')->getCollection();
$productCollection->setStore($store);
$productCollection->addStoreFilter($store);
$productCollection->addAttributeToSelect(['id']);
// some more filters
$productCollection->load();
foreach ($productCollection->getItems() as $item) {
// do some stuff
}
}
我启用了 catalog_product_flat
tables。
当我为我的 $productCollection
调试查询时,我发现它为第一家商店使用了正确的单位 table,但之后它总是使用单位 table 运行 之前的商店。
商店 1 -> catalog_product_flat_1
商店 2 -> catalog_product_flat_1
商店 3 -> catalog_product_flat_2
商店 4 -> catalog_product_flat_3
顺便说一句:我注意到,setStore()
和 addStoreFilter()
对选定的 table 没有任何影响。
有什么我遗漏的吗?
谢谢!
因为我找不到这个问题的原因,所以我找到了解决这个问题的方法。
$resource = Mage::getResourceModel('catalog/product_flat');
$select = $resource->getReadConnection()
->select('entity_id')
->from(['table' => $resource->getMainTable()], 'entity_id')
->where('table.status = 1');
// some more filters
$results = $resource->getReadConnection()->fetchAll($select);
此查询使用了正确的单位 table,因为我只需要产品 ID,这对我来说非常有用。
我有一个 Magento 1.9 安装,有 4 个商店(2 个网站,每个网站有 2 个商店)。对于出口,我需要按商店获取所有产品。
这就是我尝试的方法:
/** @var Mage_Core_Model_Store[] */
$stores = Mage::app()->getStores();
foreach ($stores as $store) {
if (!$store->getIsActive()) {
continue;
}
Mage::app()->setCurrentStore($store);
/** @var Mage_Catalog_Model_Resource_Product_Collection */
$productCollection = Mage::getModel('catalog/product')->getCollection();
$productCollection->setStore($store);
$productCollection->addStoreFilter($store);
$productCollection->addAttributeToSelect(['id']);
// some more filters
$productCollection->load();
foreach ($productCollection->getItems() as $item) {
// do some stuff
}
}
我启用了 catalog_product_flat
tables。
当我为我的 $productCollection
调试查询时,我发现它为第一家商店使用了正确的单位 table,但之后它总是使用单位 table 运行 之前的商店。
商店 1 -> catalog_product_flat_1
商店 2 -> catalog_product_flat_1
商店 3 -> catalog_product_flat_2
商店 4 -> catalog_product_flat_3
顺便说一句:我注意到,setStore()
和 addStoreFilter()
对选定的 table 没有任何影响。
有什么我遗漏的吗?
谢谢!
因为我找不到这个问题的原因,所以我找到了解决这个问题的方法。
$resource = Mage::getResourceModel('catalog/product_flat');
$select = $resource->getReadConnection()
->select('entity_id')
->from(['table' => $resource->getMainTable()], 'entity_id')
->where('table.status = 1');
// some more filters
$results = $resource->getReadConnection()->fetchAll($select);
此查询使用了正确的单位 table,因为我只需要产品 ID,这对我来说非常有用。