Magento中save()操作机制(_beforesave,_aftersave)
来源:互联网 发布:如何修改淘宝好评 编辑:程序博客网 时间:2024/05/18 14:15
每个save执行时都会要执行几步操作,如下:
public function save()_beforesave() _resource{ _beforesave() save _aftersave() }_aftersave
public function save(){ ... try { $this->_beforeSave(); if ($this->_dataSaveAllowed) { $this->_getResource()->save($this); $this->_afterSave(); } ...}protected function _beforeSave(Mage_Core_Model_Abstract $object){ if (!$object->getId()) { $object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate()); } if ($object->hasData('stores') && is_array($object->getStores())) { $stores = $object->getStores(); $stores[] = 0; $object->setStores($stores); } elseif ($object->hasData('stores')) { $object->setStores(array($object->getStores(), 0)); } return $this;}protected function _afterSave(Mage_Core_Model_Abstract $object) { $adapter = $this->_getWriteAdapter(); /** * save detail */ $detail = array( 'title' => $object->getTitle(), 'detail' => $object->getDetail(), 'nickname' => $object->getNickname(), ); $select = $adapter->select() ->from($this->_reviewDetailTable, 'detail_id') ->where('review_id = :review_id'); $detailId = $adapter->fetchOne($select, array(':review_id' => $object->getId())); if ($detailId) { $condition = array("detail_id = ?" => $detailId); $adapter->update($this->_reviewDetailTable, $detail, $condition); } else { $detail['store_id'] = $object->getStoreId(); $detail['customer_id']= $object->getCustomerId(); $detail['review_id'] = $object->getId(); $adapter->insert($this->_reviewDetailTable, $detail); } /** * save stores */ $stores = $object->getStores(); if (!empty($stores)) { $condition = array('review_id = ?' => $object->getId()); $adapter->delete($this->_reviewStoreTable, $condition); $insertedStoreIds = array(); foreach ($stores as $storeId) { if (in_array($storeId, $insertedStoreIds)) { continue; } $insertedStoreIds[] = $storeId; $storeInsert = array( 'store_id' => $storeId, 'review_id'=> $object->getId() ); $adapter->insert($this->_reviewStoreTable, $storeInsert); } } // reaggregate ratings, that depend on this review $this->_aggregateRatings( $this->_loadVotedRatingIds($object->getId()), $object->getEntityPkValue() ); return $this; }
这里的resource里面的_beforesave()里面可以看作是save的预处理,在这里可以加入一些只要执行就要自动保存的数据作为预处理,例如:
if (!$object->getId()) { $object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());}
这里就是在预处理created_at字段直接进行保存,_beforesave()之后执行save操作,然后执行_aftrsave()操作,这里是对一些数据(我理解的是非主表的数据表)中的一些数据进行保存,例如:
$detail = array( 'title' => $object->getTitle(), 'detail' => $object->getDetail(), 'nickname' => $object->getNickname(),);$select = $adapter->select() ->from($this->_reviewDetailTable, 'detail_id') ->where('review_id = :review_id');$detailId = $adapter->fetchOne($select, array(':review_id' => $object->getId()));
这里就是对title,detail,nickname字段进行保存,在代码执行保存操作的时候用如下代码:
$review->setEntityId(1) ->setEntityPkValue($productId) ->setStoreId($data['stores'][0]) ->setStatusId($data['status_id']) ->setAdminId($data['admin_id']) ->save();
阅读全文
0 0
- Magento中save()操作机制(_beforesave,_aftersave)
- save-------magento --后台保存信息!!
- magento机制
- Hibernate中getHibernateTemplate()下的update、delete、save操作
- magento 模块重写机制
- Magento的事件机制
- magento发送邮件机制
- magento的event机制
- magento 消息机制
- magento----使用magento机制安装数据表
- 增强magento缓存机制-------magento提速方法
- magento的event机制[magento二次开发]
- 源码分析 Yii - save 机制
- Magento事件机制 - Magento Event/Observer 【magento二次开发】
- magento - 通过如何在magento的模板中获取到产品或产品分类的instance呢谈magento的helper类机制
- magento--------------数据库操作
- magento操作汇总
- Magento操作数据库
- EOJ Monthly 2017.12
- 整理1---命令
- python面向对象(三)之继承
- for循环与while循环的区别
- 第三方开源库 RxJava
- Magento中save()操作机制(_beforesave,_aftersave)
- 软件测试面试必备网络知识要点
- 图文详解mongoDB win7x64安装教程
- 架构腐化之谜
- 虚拟机上配置静态ip访问外网(NAT模式)
- 【学习笔记】List和Tuple的使用
- Linux Bash入门:变量和数学运算
- Http 2.0 了解
- Caffe学习小结