某个字段保存不了 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('[email protected]');
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>'; } }