第十二天(2016年2月18日)
一、 Magento数据迁移过程中发生的MySQL问题
问题描述:General error: 1449 The user specified as a definer ('magento'@'localhost') does not exist
问题分析:创建trigger触发器的账户是magento@localhost,目前不存在,所以数据库中涉及触发器部分的功能保存时,都会碰到上面的错误。
解决思路一:创建magento@localhost账户并配置相应权限;
思路一配置完成后,系统错误任然依旧报错,原因是,创建触发器的账户再删除后,重新建立,并不能解决问题,系统不认新建立账户;
解决思路二:将视图、触发器、事件、存储过程的definer改成系统目前存在的账户;
解决思路三:先创建好magento@localhost账户,再导入数据库数据;
思路二与思路三都可行,可根据实际情况采用解决方法。
二、 数据库实例测试:Magento的collections测试
1. 增加一个前端控制器,编写测试代码;
1 public function collectionAction() { 2 $productCollection = Mage::getModel('catalog/product') 3 ->getCollection() 4 ->setPageSize(10, 1); 5 6 foreach ($productCollection as $product) { 7 Zend_Debug::dump($product->debug()); 8 } 9 }
2. 以上产品数据中没有属性数据,使用addAttributeToSelect('<attribute_code>')
1 $productCollection = Mage::getModel('catalog/product') 2 ->getCollection() 3 ->addAttributeToSelect('name') 4 ->addAttributeToSelect('price') 5 ->addAttributeToSelect('image') 6 ->setPageSize(10, 1); 7
3. 增加过滤器,相当于增加了SQL中的WHERE语句;
1 $productCollection = Mage::getModel('catalog/product') 2 ->getCollection() 3 ->addAttributeToSelect('price') 4 ->addAttributeToSelect('image') 5 ->addAttributeToFilter('name', 'test simple');
4. 多个结果筛选,相当于WHERE IN语句;
1 $productCollection = Mage::getModel('catalog/product') 2 ->getCollection() 3 ->addAttributeToSelect('price') 4 ->addAttributeToSelect('image') 5 ->addAttributeToFilter('entity_id', array( 6 'in' => array(6,5,4) 7 ));
5. 模糊查询,相当于LIKE;
1 $productCollection = Mage::getModel('catalog/product') 2 ->getCollection() 3 ->addAttributeToSelect('price') 4 ->addAttributeToSelect('image') 5 ->addAttributeToFilter('name', array( 6 'like' => '%configurable%' 7 ));
6. 打印执行的SQL语句;
1 $productCollection->load(); 2 $productCollection->getSelect()->__toString();
7. setDataToAll('price', 20), 更新所有collection集合中的属性值;
1 $productCollection->setDataToAll('price', 20); 2 $productCollection->save();
8. 获取collection实体的方法,有如下两种;
- Mage::getModel('model/entity ')->getCollection();
- Mage::getResourceModel('model/entity_collection');
注:EAV模型是addAttributeToFilter(),Flat模型是addFieldToFilter()。