这是来自 app/code/core/Mage/Catalog/etc/config.xml.

<config>
..............
    <global>
            <models>
                <catalog>
                    <class>Mage_Catalog_Model</class>
                    <resourceModel>catalog_resource</resourceModel>
                </catalog>
                <catalog_resource>
                    <class>Mage_Catalog_Model_Resource</class>
                    <deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>
                    <entities>
                        <product>
                            <table>catalog_product_entity</table>
                        </product>
................
</config>

我们可以创建mage_catalog_model_porduct对象为

$model = Mage::getModel('catalog/product');

相同的方式可以如下创建资源模型对象。

$resourceModel = Mage::getModel('catalog_resource/product');

我知道基本上已经有一个功能 Mage::getResourceModel();。例子: Mage::getResourceModel('catalog/product');

但是这种方式也可以正常工作。

谁能解释为什么不使用 Mage::getModel() 获取资源模型对象?任何建议将不胜感激。

有帮助吗?

解决方案

这只是我的看法,所以请随意挑战它,但是我的意思是,从理论上讲,您可以更改资源模型类。例如,我可以在自己的模块中添加:

<global>
        <models>
            <catalog>
                <resourceModel>my_resource</resourceModel>
            </catalog>
            <my_resource>
                <class>My_Module_Model_Resource</class>
....

如果我要使用 Mage::getModel('catalog_resource/product') 我会得到原始类的实例,因为在config dom中,声明仍然存在。
但是通过打电话 Mage::getResourceModel('catalog/product') 现在我得到了新课的实例。
因此,我可以得出结论,其原因“可扩展性”。
另一个原因可能是保持一致性。
如果您打电话 Mage::getModel($someParam) 您将使用相同的参数获得相应的资源模型: $someParam.

许可以下: CC-BY-SA归因
scroll top