某个字段保存不了 entity/customer _getDefaultAttributes添加字段名
- $customer = Mage::getModel('customer/customer')->load(1);
- $customer->setData('is_charge', '2');
- $customer->save(); //is_charge保存不成功原因
对某个字段进行算法操作或函数操作用new Zend_Db_Expr
- array('point'=>new Zend_Db_Expr('pd.value*2'))
model/customer/customer.php
- Mage::getSingleton('customer/customer')->setWebsiteId(Mage::app()->getStore()->getWebsiteId())->loadByEmail('demo@demo.com');
Model的启用,可以用Model下的文件 etc/config.xml
- <models>
- <ticket>
- <class>Test_Ticket_Model</class>
- <resourceModel>ticket_mysql4</resourceModel>
- </ticket>
- </models>
CURD操作:
- public function createNewPostAction() {
- $blogpost = Mage::getModel('ticket/log');
- $blogpost->setTitle('Code Post!');
- $blogpost->setPost('This post was created from code!');
- $blogpost->save();
- echo 'post created';
- }
- public function editFirstPostAction() {
- $blogpost = Mage::getModel('ticket/log');
- $blogpost->load(1); //load($id, $field=null) $filed = '键值'
- $blogpost->setTitle("The First post!");
- $blogpost->save();
- echo 'post edited';
- }
- public function deleteFirstPostAction() {
- $blogpost = Mage::getModel('ticket/log');
- $blogpost->load(1);
- $blogpost->delete();
- echo 'post removed';
- }
- //查询(select)语句
- $connection = Mage::getSingleton('core/resource')->getConnection('core_read');
- $select = "select * from table;"
- //$select = $connection->select()->from('table', array('*')) ;
- $rowsArray = $connection->fetchOne($select); // return row index0
- $rowArray =$connection->fetchRow($select); //return row
- //插入(insert)语句
- $fields = array();
- $fields['name']= 'test';
- $connection->insert('tablename', $fields);
- //更新(update)语句
- $connection->beginTransaction();
- $fields = array();
- $fields['name'] = 'jony';
- $where = $connection->quoteInto('id =?', '1');
- $connection->update('tablename', $fields, $where);
- $connection->commit();
- //删除(delete)语句
- $condition = array($connection->quoteInto('id=?', '1'));
- $connection->delete('tablename', $condition);
注意上面的getConnection()方法中的参数 "core_read",表明了Magento将要使用的资源。与之相对应,当我们修改数据库的时候使用参数"core_write".一般情况下 getConnection方法的参数应设成"core_read" 或 "core_write"(应该不指定也是可以的,但是如果Magento有多个数据库就必须指定了 )。对应上面新增的module的名字.使用下面相对应的语句在read或write Database:
- $conn = Mage::getSingleton('core/resource')->getConnection('ticket_read');
- $conn = Mage::getSingleton('core/resource')->getConnection('ticket_write');
local\Test\Ticket\etc\config.xml model添加资源模型和实体对象,可以用Model\Mysql4下的文件
- <global>
- <models>
- <ticket>
- <class>Test_Ticket_Model</class>
- <resourceModel>ticket_mysql4</resourceModel>
- </ticket>
- <ticket_mysql4>
- <class>Test_Ticket_Model_Mysql4</class>
- <entities>
- <log><!--model name-->
- <table>ticket_log</table><!-- table name-->
- </log>
- <type>
- <table>ticket_type</table>
- </type>
- <ticket>
- <table>ticket</table>
- </ticket>
- </entities>
- </ticket_mysql4>
- </models>
- <resources>
- <ticket_write>
- <connection>
- <use>activity_setup</use> <!-- config app\etc\config.xml-->
- </connection>
- </ticket_write>
- <ticket_read>
- <connection>
- <use>activity_setup</use>
- </connection>
- </ticket_read>
- </resources>
- </global>
app\etc\config.xml
- <resources>
- ****
- </core_read>
- <activity_setup><!-- new -->
- <connection>
- <host>localhost</host>
- <username>root</username>
- <password>Test</password>
- <dbname>Test_activity</dbname>
- <model>mysql4</model>
- <initStatements>SET NAMES utf8</initStatements>
- <type>pdo_mysql</type>
- <active>1</active><!-- 是1 -->
- </connection>
- </activity_setup>
- </resources>
- <resource>
- <connection>
- <types>
- <pdo_mysql>
- <class>Mage_Core_Model_Resource_Type_Db_Pdo_Mysql</class>
- </pdo_mysql>
- </types>
- </connection>
- </resource>
local\Test\Ticket\Model\Log.php
- <?php
- class Test_Ticket_Model_Log extends Mage_Core_Model_Abstract
- {
- public function _construct()
- {
- parent::_construct();
- $this->_init('ticket/log');
- }
- public function saveInfo($rewriteData)
- {
- return $this->getResource()->saveWeiboData($rewriteData);
- }
- public function getLastRechargeReal($customerId, $rechargeType) //array
- {
- return $this->getResource()->getLastRechargeReal($customerId, $rechargeType);
- }
- public function getRecommendProducts() //object
- {
- if (!$this->getId()) {
- return array();
- }
- $array = $this->getData('recommend_products');
- if (is_null($array)) {
- $array = $this->getResource()->getRecommendProducts($this);
- $this->setData('recommend_products', $array);
- }
- return $array;
- }
- public function saveCardInfo($cardNo)
- {
- try {
- /*开始事务*/
- $this->getResource()->beginTransaction();
- $customer = Mage::getSingleton('customer/session')->getCustomer();
- $oldcard = $customer->getData('idcard');
- #更新卡状态为绑定
- $idcard = $this->loadByCardno($cardNo);
- $idcard->setData('idcard_status', self::IDCARD_STATUS_BINDING);
- $idcard->save();
- #更新用户的ID卡
- $customer->setData('idcard', $cardNo);
- $customer->save();
- $this->getResource()->commit();
- } catch (exception $e) {
- $this->getResource()->rollBack();
- }
- }
- }
Mysql4 local\Test\Ticket\Model\Mysql4\Log.php
- <?php
- class Test_Ticket_Model_Mysql4_Log extends Mage_Core_Model_Mysql4_Abstract {
- public function _construct() {
- //$this->_setResource(array('read' =>'ticket_read', 'write' =>'ticket_write'));//多数据库
- $this->_init('ticket/log', 'id'); #主键
- }
- public function getLastRechargeReal($customerId, $rechargeType) {
- $sql = $this->_getReadAdapter()->select()->from($this->getMainTable(), array('customer_id'))
- ->where('customer_id = ?', $customerId)
- ->where('recharge_type = ?', $rechargeType)
- ->order(array('id DESC'))
- ->limit(1);
- return $this->_getReadAdapter()->fetchRow($sql);
- }
- //联表查询
- public function getAttributesUsedInListing() {
- $sql = $this->_getReadAdapter()->select()
- ->from(array('main_table' => $this->getMainTable()))
- ->join(array('additional_table' => $this->getTable('catalog/eav_attribute')),
- 'main_table.attribute_id = additional_table.attribute_id',
- array())
- ->joinLeft(array('al' => $this->getTable('eav/attribute_label')),
- 'al.attribute_id = main_table.attribute_id AND al.store_id = ' . (int)$this->getStoreId(),
- array('store_label' => new Zend_Db_Expr('IFNULL(al.value, main_table.frontend_label)')))
- ->where('additional_table.used_in_product_listing=?', 1);
- // $sql = $sql->assemble();
- // echo $sql;
- return $this->_getReadAdapter()->fetchAll($sql);
- }
- public function saveInfo($rewriteData) {
- $this->_getWriteAdapter()->insert($this->getMainTable(), $rewriteData);
- return $this->_getWriteAdapter()->lastInsertId();
- }
- public function updateInfo($id, $rewriteData) {
- $this->_getWriteAdapter()->update($this->getMainTable(), $rewriteData, $this->_getWriteAdapter()->quoteInto($this->getIdFieldName() . '=?', $id));
- }
- public function test() {
- $sql = 'update ' . $this->getMainTable() . " set a=1 where id=1";
- return $this->_getReadAdapter()->query($sql);
- //$this->beginTransaction();
- $this->_getWriteAdapter()->delete($this->getMainTable(), array("email='$email''", "type='$type'"));
- //$this->_getWriteAdapter()->delete($this->getMainTable(), $this->_getWriteAdapter()->quoteInto($this->getIdFieldName().'=?', $id));
- }
- public function count() {
- $table = $this->getMainTable();
- $select = $this->_getReadAdapter()
- ->select()
- ->from($table)
- ->reset('columns')
- ->columns(new Zend_Db_Expr('count(*)'));
- echo $select . '<br>';
- $select = $this->_getReadAdapter()
- ->select()
- ->from($table)
- ->reset('columns')
- ->columns(new Zend_Db_Expr('max(list_id)'));
- echo $select . '<br>';
- }
- }