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_details
的 register
部分等于 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_CompanyDetails
、Account_Register_Model_Mysql4_CompanyDetails
和Account_Register_Model_Mysql4_CompanyDetails_Collection
中(不要忘记Account_Register_Model_Mysql4_CompanyDetails
中的第二个参数,它应该是你数据库的主键table )
我有一个自定义模块 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_details
的 register
部分等于 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_CompanyDetails
、Account_Register_Model_Mysql4_CompanyDetails
和Account_Register_Model_Mysql4_CompanyDetails_Collection
中(不要忘记Account_Register_Model_Mysql4_CompanyDetails
中的第二个参数,它应该是你数据库的主键table )