Прочитав Fixing Magento Flat Collections with Chaos от Alan Storm и найдя аналогичный вопрос SO here Я пытаюсь вернуть продукты, относящиеся к категории, но без «плоских» данных Magento.Не используйте «плоские» данные в magento
Вот код, который я первоначально использовал:
$category_model = Mage::getModel('catalog/category')->load($cid);
$collection = Mage::getModel('catalog/product_collection');
$collection->addCategoryFilter($category_model);
$collection->addAttributeToSort('entity_id','DESC');
$collection->addAttributeToSelect('*');
$collection->printLogQuery(true);
Когда этот код увольняют через AJAX я получаю разные результаты, чем когда я запускаю его от наблюдателя и причина из-за плоских данных. Так что я написал свои собственные классы, которые предназначены для использования модели EAV:
app/code/local/Mynamespace/Mymodule/Model/Category.php:
class Mynamespace_Mymodule_Model_Category extends Mage_Catalog_Model_Category
{
protected function _construct()
{
$this->_init('catalog/category');
}
}
И:
app/code/local/Mynamespace/Mymodule/Model/Productcollection.php:
class Mynamespace_Mymodule_Model_Productcollection
extends Mage_Catalog_Model_Resource_Product_Collection
{
protected function _construct()
{
$this->_init('catalog/product');
$this->_initTables();
}
}
А затем изменить мой код запроса:
$category_model = Mage::getModel('mymodule/category')->load($cid);
$collection = Mage::getModel('mymodule/productcollection');
$collection->addCategoryFilter($category_model);
$collection->addAttributeToSort('entity_id','DESC');
$collection->addAttributeToSelect('*');
$collection->printLogQuery(true);
Однако приведенный выше код по-прежнему запрашивает таблицу плоских данных. Что я могу делать неправильно?
На данный момент это было сделано, написав мой собственный SQL-запрос, но было бы полезно, если кто-то может помочь в любом случае. – beingalex