我期待着了解Magento的ORM如何将查询过滤器分解为实际的SQL以运行查询以获取模型的EAV数据(比如类别)?
答案 0 :(得分:1)
在magento中,通常使用集合从数据库加载数据。集合提供了诸如 addAttributeToFilter()之类的方法。使用这些,您可以指定要实际加载的行。在后台,magento正在考虑EAV模型的同时构建SQL查询。一旦加载()集合,SQL查询就会在数据库上实际执行。
示例:您要加载具有 my_att 属性和值 my_val 的产品。第一步是获取集合:
#Value
现在您可以过滤属性:
$productCollection = Mage::getModel('catalog/product')->getCollection();
要了解发生了什么,您可以通过以下方式获取为您构建的实际SQL查询magento:
$productCollection->addAttributeToFilter('my_att', array('eq' => 'my_val'));
正如您所见,magento构建了考虑EAV模型的SQL查询(加入正确的表,如 catalog_product_entity_varchar )。有关EAV模型以及如何在magento中组织属性的更多信息,我强烈推荐认证学习指南(http://info2.magento.com/rs/magentoenterprise/images/Certification-Study-Guide-MCD-v1.pdf)。