Questions tagged «model»

模型包含Magento模块中的大多数业务逻辑


1
Magento工厂方法中的全类名
在Magento 1中,如果我在工厂方法中使用完整的Magento类名,则可以实例化一个对象 //trying full class name instead of catalog/product $object = Mage::getModel('Mage_Catalog_Model_Product'); 但是,对于助手来说,这是行不通的。如果你试试 Mage::helper('Mage_Core_Helper_Url'); 你得到 Warning: include(Mage/Mage/Core/Helper/Url/Helper/Data.php): failed to open stream: No such file or directory in /path/to/magentolib/Varien/Autoload.php on line 93 #0 /path/to/magentolib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(Mage/Ma...', '/path/to/magent...', 93, Array) #1 /path/to/magentolib/Varien/Autoload.php(93): Varien_Autoload::autoload() #2 [internal function]: Varien_Autoload->autoload('Mage_Mage_Core_...') #3 /path/to/magentoapp/Mage.php(547): spl_autoload_call('Mage_Mage_Core_...') #4 /path/to/magentoapp/code/local/Sebastianjuffar/Commercebug/controllers/IndexController.php(11): …
11 model  helper  factory 



2
如何保存模型的新实体或更新实体?
在Magento 2中,我们有存储库类。save()如果我正确的话,Magento 1.9中大量使用的经典方法已从2.04或2.05弃用。我使用工厂创建新对象,并在设置了新属性后,例如我调用的产品save(): $productFactory->create()->setName()...->save() 另一方面,我们的存储库中也包含method save。我正在像这样概括地使用它: $product = $productFactory->create()->setName()... $productRepository->save($product) 在我的代码中,我有两种方式都可以工作的类。我也注意到有时不同的方式意味着不同的行为。使用存储库的方式是否提供了对数据的一些附加验证? 我应该采取哪种方式?

2
什么以及为什么是加载模型的正确方法
我在Magento方面有很多经验,但是我意识到我不知道哪种加载模型的方法是正确的,为什么。我已经阅读了关于该主题的所有内容,但是人们对此类内容的解释实际上并没有深入到足以解释的原因,为什么要使用此特定方法而不是其他方法。假设没有要加载的模型的存储库。 直到现在,我一直在构造器中使用模型,然后简单地加载它。 public function __construct( \Vendor\Module\Model\Something $somethingModel ) { $this->somethingModel = $somethingModel; } public function getTestById($id) { return $this->somethingModel->load($id); } 而且它总是按预期工作,我也很确定它至少已在内核中使用。 但是后来我看到一位同事在使用 modelFactory->create()->load($id) 据我了解,工厂正被用来创建一个新的实体,例如,如果我想创建一个新产品,那么我可以创建工厂,用数据填充它,然后保存它。但是话又说回来,我开始研究这个话题,并从Fabian Schmengler(我们何时应该在Magento 2中使用存储库和工厂?)中看到了一个示例,他以这种方式加载模型,并且不鼓励其他人简单地加载模型,他没有这样做。除了解释为什么它不是“服务合同的一部分”之外,还要说明原因。据我了解,存储库是服务合同的一部分,因此在加载通过存储库不可用的模型时,在这里看不到任何联系。 为了增加一些混乱,我还找到了一种通过从创建的modelFactory中获取resourceModel来加载模型的方法,该方法由Vinai Kopp提出(如何在Magento 2中实现自定义模块的服务合同?),现在就像我一直读到的那样,我不应该直接使用资源模型而完全迷失了方向。 是的,有人可以告诉我哪种方法正确,为什么我应该用它代替所有其他方法?

1
具有非自动增量主键的表
我已经在Magento中设置了一个表格,该表格具有两个字段,即id和date。日期只是现在的日期,但是id实际上是附加在订单ID上的外键。 我的问题是Magento不会保存这些对象,不会发生任何错误,但是什么也不会添加到数据库中。
9 database  model  table 

2
如何加载联接2个表的模型数据?
假设我有一个目标表A的简单模型A,现在我必须添加一些额外的信息,所以我决定创建一个模型B并将那些额外的信息保存在表B中,并使用指向表A索引键的外键。 通常,联接是在集合中完成的,但是如果我加载模型,则不会调用该集合,而是仅resource model使用。 如何修改模型A还加载从数据表B上load()?
9 model  sql 


3
Mage :: getModel('catalog / product')-> load($ sku,'sku');上的错误
尝试加载产品时, $foundProduct = Mage::getModel('catalog/product')->load($sku, 'sku'); 我们得到以下错误: Fatal error: Uncaught exception 'Exception' with message 'Warning: Invalid argument supplied for foreach() in app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 954' in app/code/core/Mage/Core/functions.php:245 Stack trace: #0 app/code/core/Mage/Eav/Model/Entity/Abstract.php(954): mageCoreErrorHandler(2, 'Invalid argumen...', '/var/www/magent...', 954, Array) #1 app/code/core/Mage/Catalog/Model/Resource/Abstract.php(698): Mage_Eav_Model_Entity_Abstract->load(Object(Mage_Catalog_Model_Product), '120x180 ES-bale...', 'sku') #2 app/code/core/Mage/Core/Model/Abstract.php(225): Mage_Catalog_Model_Resource_Abstract->load(Object(Mage_Catalog_Model_Product), '120x180 ES-bale...', 'sku') #3 updatemagento.php(197): …

4
如何防止使用_save_before事件保存模型数据
我创建了一个具有自己的数据库表的模型。对于自定义,我需要触发save_before该模型的事件。 如果一个字段值不匹配,则不应保存数据。 我的主要目标是防止使用“保存前”事件保存数据 我的config.xml代码: <?xml version="1.0" ?> <config> <modules> <Amit_Custommodule> <version>1.0.0</version> </Amit_Custommodule> </modules> <global> <models> <custommodule> <class>Amit_Custommodule_Model</class> <resourceModel>custommodule_resource</resourceModel> </custommodule> <custommodule_resource> <class>Amit_Custommodule_Model_Resource</class> <entities> <custommodule> <table>custommodule</table> </custommodule> </entities> </custommodule_resource> </models> <resources> <custommodule_setup> <setup> <module>Amit_Custommodule</module> </setup> <connection> <use>core_setup</use> </connection> </custommodule_setup> <custommoule_read> <connection> <use>core_read</use> </connection> </custommoule_read> <custommodule_write> <connection> <use>core_write</use> </connection> </custommodule_write> </resources> <events> <custommodule_save_before> …

2
如何创建自定义网格过滤器
我使用自定义数据库中的字段URL添加了自定义网格列: $this->addColumn('url', array( 'header' => Mage::helper('companymodule')->__('Has Website'), 'align' => 'left', 'index' => 'url', 'renderer' => new Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl(), 'type' => 'options', 'options' => Mage::getSingleton('companymodule/hasurl')->getOptionArray(), )); 并创建此自定义呈现: class Company_Module_Block_Adminhtml_Module_Grid_Renderer_HasUrl extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract { public function render(Varien_Object $row) { $value = trim((string)$row->getData($this->getColumn()->getIndex())); if (empty($value)) { return 'No'; } else { return 'Yes'; } } …
8 adminhtml  grid  model 


1
对于cms / block实体,为什么从cms_page_store中显式删除从属数据?
cms/block实体具有联接表cms_block_store,即将给定块链接到一个或多个商店的记录。在CE 1.6之前,资源模型Mage_Cms_Model_Mysql4_Block(链接)在删除实体之前不会单独删除这些记录,而是有效地依靠级联来删除它们。从1.6.0.0版本开始,在从以下位置删除实体之前,重定位的资源模型显式删除了Mage_Cms_Model_Resource_Block::_beforeDelete(链接) 中的这些记录:cms_block protected function _beforeDelete(Mage_Core_Model_Abstract $object) { $condition = array( 'block_id = ?' => (int) $object->getId(), ); $this->_getWriteAdapter()->delete($this->getTable('cms/block_store'), $condition); return parent::_beforeDelete($object); } 是否有明显的理由在两个单独的查询中执行此操作,而不是像以前那样依赖级联?
8 database  cms  model  mysql 

3
添加到表的新列未保存
我在newsletter_subscriber表中添加了一个新列'artists_followed'。在我覆盖的Mage_Newsletter_Model_Subscriber模型类中,添加了以下功能: public function updateSubscriberArtists($email, $artist) { $this->loadByEmail($email); if ($this->getId()) { $this->setArtistsFollowed($artist); try { $this->save(); } catch (Exception $e) { throw new Exception($e->getMessage()); } } } 一切正常,没有错误,但是当我查看数据库时,不会填充新列。 我的桌子是: CREATE TABLE `mage_newsletter_subscriber` ( `subscriber_id` int(7) unsigned NOT NULL AUTO_INCREMENT, `store_id` smallint(5) unsigned DEFAULT '0', `change_status_at` datetime DEFAULT NULL, `customer_id` int(11) unsigned NOT …
8 model 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.