我正在为Magento电子商务网站创建一个自定义模块,该模块将围绕一个具有复合/复合主键的新(即自定义)表,或者表中有两列组成主键.有没有人知道如何根据具有复合键的表创建模型/资源模型?
为了给出更多的细节,我已经查看了几个教程,并使用了优秀的moduleCreator脚本.但是,似乎所有的教程围绕着表中只有一列的PK.这样的事情
class <Namespace>_<Module>_Model_MysqL4_<Module> extends Mage_Core_Model_MysqL4_Abstract { public function _construct(){ $this->_init('<module_alias>/<table_alias>','<table_primary_key_id>'); } }
另外,我只是注意到,看数据库模型几乎所有的表都有一个主键.我明白这与EAV风格的数据库结构有很大的关系,但仍然可以使用带有复合PK的表?如果可能,我想坚持使用Magento框架/约定.是否气馁?我应该更改我的自定义表的结构以具有一些虚拟id列?我有能力做到这一点,但是geez!
(另一个注意事项,我想我会提到的是,它看起来像Zend框架提供了一种方法来使一个类在一个表上复合主键(see Example #20 on this page – 大约一半),所以似乎Magento框架应该也提供它…我只是看不到如何.)
像大多数Active Record灵感的模型一样,Magento的Mage_Core_Model_Abstract不是构建在支持复合主键之上的.从这个基础继承的任何模型(意思是所有这些)都继承了这个假设.如果要使用复合主键,您将无法使用.您的选择是去Magento Model路由,并创建一个单一的主键(“false”,就像你所说的那样),然后在表中应用一个唯一的索引,或者使用基本的Zend DB表或OR import来实现你自己的Model层系统中的第三方模型解决方案,支持您所需的功能.
就Zend框架而言,Magento团队使用Zend的Table Gateway Pattern to implement an Active Record style Model layer框架. Zend Framework不是像Cake或Rails这样的应用程序堆栈,它是可以用于构建应用程序堆栈(或应用程序或许多其他事情)的类库集合.只是因为Zend Framework类支持的东西并不意味着使用Zend Framework的系统和应用程序可以免费获得.