Magento - 单个模型可能有多个表吗?

时间:2010-12-03 19:17:13

标签: database magento config entity-attribute-value

尝试为自定义模块设置配置文件 - 我是否需要为每个'resourceModel'设置一个唯一的模型,或者每个模型可以有多个表实体?

是否有可能让这样的事情发挥作用:


    <config>...
 <model>
  <namespace>
    <class>Namespace_Module_Model</class>
    <resourceModel>module_mysq4</resourceModel>
  </namespace>
  <module_mysql4>
   <class>Namespace_Module_Model_Mysql4</class>
    <entities>
        <table_1>
            <table>table_1</table>
        </table_1>
        <table_2>
            <table>table_2</table>
        </table_2>
        <table_3>
            <table>table_3</table>
        </table_3>
        ...
    </entities>
   </module_mysql4>
..</config>

然后通过模型在表之间动态切换?

和相关:任何人都知道这些孩子的可能性和他们的适当性?我见过'实体','协会'和'项目' - thx

3 个答案:

答案 0 :(得分:3)

你在这里要问的并不是很清楚。 Magento有一个基本的一个资源一个表资源,一个一个资源以特定方式构建的许多表 EAV风格模型的资源。

上面描述的场景并不是系统直接支持的,但是如果你想实现类似的东西,那么没有什么可以阻止你实现任何你想要的方式的资源。

对于可能的子节点,创建简单的配置查看器described here以获取整个合并配置的转储,然后使用xpath查看器检查您感兴趣的所有节点(及其子节点)在

答案 1 :(得分:1)

响应的响应&amp;如果问题不清楚,请道歉。经过几个小时的调试后,我让它使用以下结构:


<models>
  <modulename>
   <class>Namespace_Modulename_Model</class>
   <resourceModel>modulename_mysql4</resourceModel>
  </modulename>
  <modulename_type1>
   <class>Namespace_Modulename_Model_Type1</class>
   <resourceModel>modulename_mysql4</resourceModel>
  </modulename_type1>
   <modulename_type2>
   <class>Namespace_Modulename_Model_Type2</class>
   <resourceModel>modulename_mysql4</resourceModel>
  </modulename_type2>
  <modulename_mysql4>
   <class>Namespace_Modulename_Model_Mysql4</class>
   <entities>
    <modulename>
     <table>modulename</table>
    </modulename>
     <modulename_type1>
     <table>modulename_type1</table>
    </modulename_type1>
     <modulename__type2>
     <table>modulename_type2</table>
    </modulename_type2>
   </entities>
  </modulename_mysql4>

 </models>

所以是的 - 对于声明的每个模型(一个模型,一个资源),有一个表实体,但我假设每个额外的模型/ resourceModel组合都需要它自己的module_Mysql节点,它自己的modulename_mysql4节点,ala:


<models>
 <modulename>
  <class>Namespace_Modulename_Model</class>
  <resourceModel>modulename_mysql4</resourceModel>
 </modulename>
 <modulename_type1>
  <class>Namespace_Modulename_Model_Type1</class>
  <resourceModel>modulename_mysql4_type1</resourceModel>
 </modulename_type1>
  <modulename_type2>
  <class>Namespace_Modulename_Model_Type2</class>
  <resourceModel>modulename_mysql4_type2</resourceModel>
 </modulename_type2>
 <modulename_mysql4>
  <class>Namespace_Modulename_Model_Mysql4</class>
  <entities>
   <modulename>
    <table>modulename</table>
   </modulename>
  </entities>
 </modulename_mysql4>
 <modulename_mysql4_type1>
  <class>Namespace_Modulename_Model_Mysql4_Type1</class>
  <entities>
    <modulename_type1>
    <table>modulename_type1</table>
   </modulename_type1>
  </entities>
 </modulename_mysql4_type1>
 <modulename_mysql4_type2>
  <class>Namespace_Modulename_Model_Mysql_Type2</class>
  <entities>
    <modulename_type2>
    <table>modulename_type2</table>
   </modulename_type2>
  </entities>
 </modulename_mysql4_type2>
</models>

但事实并非如此。很想通过游戏解释听一出戏剧。谢谢你的帮助!

答案 2 :(得分:0)

或者:

    <resources>
        <modulename_setup>
            <setup>
                <module>modulename</module>
            </setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </modulename_setup>
        <modulename_write>
            <connection>
                <use>core_write</use>
            </connection>
        </modulename_write>

        <modulename_read>
            <connection>
                <use>core_read</use>
            </connection>
        </modulename_read>
    </resources>