`
yanggaojiao
  • 浏览: 80127 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Magento中直接使用SQL查询语句

阅读更多

本文已移到:http://www.iifire.com
Magento 和 zend framework 的DB层都完全实现了抽象(封装成类了),这样方便我们在使用数据库资源时直接调用相关的Resource类而不用理会DB底层的具体实现方法,会用就可。但是我们有时候希望能直接使用SQL语句来从表中查询和更新数据,该怎么办呢?当然Magento中提供了相关的方法,如下:

$conn = Mage::getSingleton('core/resource')->getConnection('core_read');
 

上面的的语句返回 Varien_Db_Adapter_Pdo_Mysql对象的一个实例( Zend_Db_Adapter_Abstract 的子类), 该类提供了直接调用SQL语句的方法.例:

// Prints a list of all website names
$results = $conn->fetchAll("SELECT * FROM core_website;");
foreach($results as $row) {
    echo $row['name'] . "\n";
}
 

注意上面的getConnection()方法中的参数 "core_read",表明了Magento将要使用的资源。与之相对应,当我们修改数据库的时候使用参数"core_write".一般情况下getConnection方法的参数应设成"core_read" 或 "core_write"(应该不指定也是可以的,但是如果Magento有多个数据库就必须指定了)。

作为新的entension module,在config.xml对"core_read" "core_write" 进行定义是个好的习惯。定义如下: c

<config>
    <global>
        <resources>
            <extension_setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </extension_setup>
            <extension_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </extension_read>
            <extension_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </extension_write>
        </resources>
    </global>
</config>
 

对应上面新增的module的名字.使用下面相对应的语句在read或write Database:

$conn = Mage::getSingleton('core/resource')->getConnection('extension_read');
$conn = Mage::getSingleton('core/resource')->getConnection('extension_write');
 

一般情况是绝大多数的module都定义成"core_read" "core_write"方便且节省资源。当然特殊情况除外:

  • 给每个module不同的读写权限
  • 需要用多个Database

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics