Magento2 直接写 sql 语句(direct query)

有时候一些复杂或者特殊的数据库操作,我们需要直接写sql来操作。

有2种方式

一,依赖注入的方式

protected $_resource;
public function __construct(
    \Magento\Framework\App\ResourceConnection $resource
) {
    $this->_resource = $resource;
}
 
$write = $this->_resource->getConnection('core_write');
$write->query("XXXXXX");
 
$read = $this->_resource->getConnection('core_read');
$read->fetchOne("XXXXX");

 

二,直接使用objectManager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$resource = $objectManager->get("\Magento\Framework\App\ResourceConnection");
 
$write = $resource->getConnection('core_write');
$write->query("XXXXXX");
 
$read = $resource->getConnection('core_read');
$records = $read->fetchAll("xxxxxx");

 

简单来说,就是调用\Magento\Framework\App\ResourceConnection这个类,利用里面的core_write和core_read来进行写和读。

  • fetchOne 查询一个字段
  • fetchAll 查询多条数据
  • fetchRow 查询一条数据

具体的代码见

vendor/magento/zendframework1/library/Zend/Db/Adapter/Abstract.php

 

发表评论