なぜmage :: getModel()がリソースモデルクラスに使用していないのですか?

magento.stackexchange https://magento.stackexchange.com/questions/8772

  •  16-10-2019
  •  | 
  •  

質問

これはからのコードスニペットです 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帰属
所属していません magento.stackexchange
scroll top