引用magento开发人员的一句话:php
Magento has basic one resource to one table resource。mysql
也便是一个资源对应一张数据表。
当有时候,须要在一个模块中使用多张数据表,配置多个model,那么又该如何配置model呢?sql
//建立第一张表 CREATE TABLE `custom` ( `custom_id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR( 25 ) NOT NULL PRIMARY KEY (`custom_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; //建立第二张表 CREATE TABLE `customdata` ( `customdata_id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR( 25 ) NOT NULL PRIMARY KEY (`customdata_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
<?xml version="1.0"?> <config> <modules> <Test_Custom> <active>true</active> <codePool>local</codePool> </Test_Custom> </modules> </config>
//找到以下代码 ...... <global> <models> <custom> <class>Test_Custom_Model</class> <resourceModel>custom_mysql4</resourceModel> </custom> <custom_mysql4> <class>Test_Custom_Model_Mysql4</class> <entities> //第一张表 <custom><!--这个节点要求对应Model/Mysql4/Custom.php和Model/Mysql4/Custom/Custom.php中的_init('模块名/custom')这个参数,通常要求与表名相同--> <table>custom</table> </custom> //第二张表 <customdata><!--这个节点跟上面的功能同样--> <table>customdata</table> </customdata> </entities> </custom_mysql4> </models> <resources> <custom_setup><!--这个节点对应sql/custom_setup文件夹的名称保持一致--> <setup> <module>Silk_Custom</module> </setup> <connection> <use>core_setup</use> </connection> </custom_setup> <custom_write> <connection> <use>core_write</use> </connection> </custom_write> <custom_read> <connection> <use>core_read</use> </connection> </custom_read> </resources> </global> ......
//app/code/local/Mypackage/Mymodule/Model/Custom.php <?php class Mypackage_Mymodule_Model_Test extends Mage_Core_Model_Abstract { public function _construct() { parent::_construct(); $this->_init('mymodule/Custom'); } } ?> //app/code/local/Mypackage/Mymodule/Model/Customdata.php class Mypackage_Mymodule_Model_Test extends Mage_Core_Model_Abstract { public function _construct() { parent::_construct(); $this->_init('mymodule/Customdata'); } } ?>
//app/code/local/Mypackage/Mmodule/Model/Mysql4/Custom.php <?php class Mypackage_Mymodule_Model_Mysql4_Custom extends Mage_Core_Model_Mysql4_Abstract { public function _construct() { $this->_init('mymodule/custom', 'custom_id');//custom_id为表custom的主键 } } ?> //app/code/local/Mypackage/Mmodule/Model/Mysql4/Customdata.php <?php class Mypackage_Mymodule_Model_Mysql4_Customdata extends Mage_Core_Model_Mysql4_Abstract { public function _construct() { $this->_init('mymodule/customdata', 'customdata_id');//customdata_id为表customdata的主键 } } ?>
//local/Mypackage/Mymodule/Model/Mysql4/Custom/Collection.php <?php class Mypackage_Mymodule_Model_Mysql4_Custom_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { public function _construct() { parent::_construct(); $this->_init('mymodule/custom'); } } ?> //local/Mypackage/Mymodule/Model/Mysql4/Customdata/Collection.php <?php class Mypackage_Mymodule_Model_Mysql4_Customdata_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { public function _construct() { parent::_construct(); $this->_init('mymodule/customdata'); } } ?>
model配置好后,来作下测试,咱们在block中取得数据,而后从模板文件中调取,数据库
<?php class Mypackage_Mymodule_Block_Custom extends Mage_Core_Block_Template { /* * 循环遍历出option */ public function getcustom($field) { $customdata=Mage::getModel('custom/customdata')->getCollection()->addfieldtofilter('field',$field);//addfieldtofilter()为过滤条件 $res=$customdata->getData(); //print_r($customdata->getSelectSql(true));//打印出sql语句 foreach ($res as $v) { $val=$v['val']; //echo $val; echo "<option value='$val'>$val</option>"; } } }
在模板文件中输出:app
<select name="hook_load"> <option value="">--Select--</option> <?php echo $this->getcustom('hook_load');?>//调用block中的返回的数据 </select> <select name="mast"> <option value="">--Select--</option> <?php echo $this->getcustom('mast');?>//调用block中的返回的数据 </select>
数据库内容所示:测试
输出如图所示:this