magento- 使用自定义模块创建 table

magento- create table with custom module

我有一个自定义模块 Account_Register。我正在创建一个名为 company_details 的自定义 table。我的 config.xml 是 -

--
<global>
         <models>
            <register>
                <class>Account_Register_Model</class>
                <resourceModel>register_mysql4</resourceModel>
            </register>
            <register_mysql4>
                <class>Account_Register_Model_Mysql4</class>
                <entities>
                    <register>
                        <table>company_details</table>
                    </register>
                </entities>
            </register_mysql4>
        </models>

    <resources>
            <register_setup>
                <setup>
                    <module>Account_Register</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </register_setup>
            <register_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </register_write>
            <register_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </register_read>
        </resources>
</global>
---

Account/Register/Model/CompanyDetails.php

class Account_Register_Model_CompanyDetails extends Mage_Core_Model_Abstract
{
    public function _construct()
    {
        parent::_construct();
        $this->_init('register/company_details');
    }
}

Account/Register/Model/Mysql4/CompanyDetails.php

class Account_Register_Model_Mysql4_CompanyDetails extends Mage_Core_Model_Mysql4_Abstract
{
    public function _construct()
    {
        $this->_init('register/company_details', 'company_details_id');
    }
}

和Account/Register/Model/Mysql4/CompanyDetails/Collection.php

class Account_Register_Model_Mysql4_CompanyDetails_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
    public function _construct()
    {
        parent::_construct();
        $this->_init('register/company_details');
    }

}

我不明白这里出了什么问题。 感谢任何帮助。

谢谢。

$this->_init('register/company_details'); 是问题所在。

这行代码最后会给你一个 Mage::getResourceSingleton('register/company_details').

这意味着 Magento 将在节点 <register> 之后解析 config.xml 节点 <models>,它将在您的 config.xml。 然后它会查看定义的 <resourceModel>,因为它正在查看 ResourceSingleton。

在你的 config.xml 中找到 register_mysql4 然后它会查看具有相同名称的节点 (<register_mysql4>) 和 <class> 它下面的节点。

到这里,一切正常,Magento 现在可以理解 register/company_detailsregister 部分等于 Account_Register_Model_Mysql4.

然后它将company_details中的每个单词大写:Company_Details。 唯一剩下要做的就是连接所有内容并将斜杠 / 替换为下划线 _

所以它得到 class Account_Register_Model_Mysql4_Company_Details 然后它可以映射到文件 app/code/the_code_pool_given_by_the_module/Account/Register/Model/Mysql4/Company/Details.php.
这就是它找不到您的文件的原因。

在您的实际实施中,您实际应该做的是

$this->_init('register/companydetails'); 

Account_Register_Model_CompanyDetailsAccount_Register_Model_Mysql4_CompanyDetailsAccount_Register_Model_Mysql4_CompanyDetails_Collection中(不要忘记Account_Register_Model_Mysql4_CompanyDetails中的第二个参数,它应该是你数据库的主键table )