Magento用SQL语句开发篇
有时为了调试magento,需要获取当前的查询sql语句,在magento中获取SQL语句,这里我们通过
$collection->getSelectSql(true)来调试sql
1 $collection=Mage::getResourceModel('reports/product_collection');
2 $query=$collection->getSelectSql(true);
3 echo $query;
magento获取SQL语句的另外一种方法是设置打印SQL为true
1 $collection=Mage::getResourceModel('reports/product_collection');
2 $collection->printlogquery(true);
得到的SQL语句 :
1 SELECT `e`.* FROM `catalog_product_entity` AS `e`
这里只是打印查询产品的SQL,如果要获取其他地方的SQL语句,道理也是一样的,我们根据上面的sql语句可以看到,其实magento的性能很 差,”select *”,magetno又是基于EAV(Entity Attribute Value)模型架构的,可以想象下这速度
Magento的Models 和Collection 很强大,使用它们可以很方便的查询和操作数据库。开发中,因为一些特殊需求或对Magento的了解不够深,可能会需要自己手写SQL语句来查询和操作数据库。以下分别是读写数据库的代码。
01 // For Read
02 // fetch read database connection that is used in Mage_Core module
03
04 $read= Mage::getSingleton('core/resource')->getConnection('core_read');
05
06 // first way
07 $query = $read->query("select name from core_website");
08 while ($row = $query->fetch())
09 {
10 $row = new Varien_Object($row);
11 echo "<strong>" . $row->getName() . "</strong><br/>";
12 }
13
14 // second way
15 $results = $read->fetchAll("SELECT * FROM core_website;");
16 foreach ($results as $row)
17 {
18 echo $row['name'] . "<br/>";
19 }
1 // For Write
2 // fetch write database connection that is used in Mage_Core module
3 $write = Mage::getSingleton('core/resource')->getConnection('core_write');
4
5 // now $write is an instance of Zend_Db_Adapter_Abstract
6 $write->query("insert into tablename values ('aaa','bbb','ccc')");
注意上面的getConnection()方法中的参数 “core_read”,表明了Magento将要使用的资源。与之相对应,当我们修改数据库的时候使用参数”core_write”.一般情况下 getConnection方法的参数应设成”core_read” 或 “core_write”(应该不指定也是可以的,但是如果Magento有多个数据库就必须指定了)。
作为新的entension module,在config.xml对”core_read” “core_write” 进行定义是个好的习惯。定义如下:
01 <config>
02 <global>
03 <resources>
04 <extension_setup>
05 <connection>
06 <use>core_setup</use>
07 </connection>
08 </extension_setup>
09 <extension_read>
10 <connection>
11 <use>core_read</use>
12 </connection>
13 </extension_read>
14 <extension_write>
15 <connection>
16 <use>core_write</use>
17 </connection>
18 </extension_write>
19 </resources>
20 </global>
21 </config>
对应上面新增的module的名字.使用下面相对应的语句在read或write Database:
1 $conn = Mage::getSingleton('core/resource')->getConnection('extension_read');
2 $conn = Mage::getSingleton('core/resource')->getConnection('extension_write');
一般情况是绝大多数的module都定义成”core_read” “core_write”方便且节省资源。当然特殊情况除外:
给每个module不同的读写权限
需要用多个Database
from: http://blog.sina.com.cn/s/blog_687015bd0100t2b2.html
Magento用SQL语句开发篇的更多相关文章
- oracle 中SQL 语句开发语法 SELECT INTO含义
oracle 中SQL 语句开发语法 SELECT INTO含义 在ORACLE中SELECT INTO是如何使用的,什么意思?和SQL SERVER的不一样? 和sqlserver的不一样sql ...
- 一些能体现个人水平的SQL语句[总结篇]
作为一名小小的开发人员,刚入门的时候觉得很难,过了一段时间之后,发现很简单,很快就可以搞定很bug了.然而这并不能说明你就已经很牛掰了,只能说,你不了解其他太多的东西.应该说,数据库有几个共同的命令, ...
- 2019.3.22 SQL语句(基础篇)
SQL语句 创建一个数据库: create database+数据库名; 使用数据库: use+数据库名; 查看mySQL中有哪些数据库: show databases; 删除数据库 drop dat ...
- Sql效能优化总结(续)- sql语句优化篇
今晚继续进行Sql效能问题的分享,今天主要是一些具体的sql优化方法和思路分享,若看过后你也有其他想法,欢迎一起探讨,好了,进入今天的主题. 针对性地对一些耗资源严重的具体应用进行优化 出现效能问题时 ...
- mysql数据库基础SQL语句总结篇
常用的sql增删改查语句 创建数据库:create database db_name character set utf8;删除数据库:drop database db_name;切换数据库:use ...
- sql语句开发使用---update
单表的更新大家都用过了,现在说下实际开发过程中,需要多表的查询更新状态,或者跨数据库的更新状态. 东西需要学习了才会懂得,所以站在巨人的肩膀看的更远. sql 语法; UPDATE 表名称 SET 列 ...
- 2019.3.25 SQL语句(进阶篇1)
运算符 基本的加减乘除取余都可以在SQL中使用 新建Employee1表并添加数据 create table Employee1 (eid int primary key auto_increment ...
- ORACLE基本SQL语句-查询篇
一.普通查询 /*查询表数据*/select * from STU /*取出前3行数据*/select * from stu where ROWNUM<=3 /*模糊查询*/select * f ...
- Magento中直接使用SQL语句
原理: magento是基于Zend Framework的,所以底层用的还是zend的zend db 在文件app/code/core/Mage/Catalog/model/Resource/Eav ...
随机推荐
- python 在图像上写中文字体 (python write Chinese in image)
本人处理图像的时候经常使用opencv的包,但是 cv2.putText 显示不了中文,所以查找了如何在python在图像上写中文的方法,在伟大的Stack Overflow上面找到一个方法,分享给大 ...
- 【leetcode】946. Validate Stack Sequences
题目如下: Given two sequences pushed and popped with distinct values, return true if and only if this co ...
- Python--面向对象的程序设计之继承与派生
继承与派生 什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 cla ...
- Temporarily disable Ceph scrubbing to resolve high IO load
https://blog.dachary.org/2014/08/02/temporarily-disable-ceph-scrubbing-to-resolve-high-io-load/ In a ...
- UNP学习第五章(二)
一.POSIX信号处理 信号:告知某进程发生了某个事件的通知(软中断),通常是异步的. 信号可以:由进程发给另一个进程,由内核发给某个进程. 设置信号处理办法,有三个选择: 1.写一个函数,在信号发生 ...
- Migrating Your Android App from Eclipse to Android Studio
By: Jason Snell | Posted in: Mobile, Performance Tech Tips, Top Post, Jun. 7th, 2013 12 inShare One ...
- ip协议,IP,子网掩码,ping命令是什么
ip协议: 定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由32位2进制表示 IP地址:是给每个连接在Internet上的主机分配的一个32bit ...
- 建立logback.xml 配合MDC 实现追踪
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...
- 【git】如何ignore一个文件的更改又保留其初始版本
参考: https://compiledsuccessfully.dev/git-skip-worktree/ https://stackoverflow.com/questions/9794931/ ...
- JSON与Java对象的互相转换
JSON与Java对象的互相转换 例一(单个对象进行赋值): @RequestMapping("test1.do") @ResponseBody public JSONObject ...