Magento学习手记(第十二天)

第十二天(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()。

posted @ 2016-03-15 20:40  爱偷懒的程序员pisTol  阅读(279)  评论(0编辑  收藏  举报