Tôi chỉ muốn gọi truy vấn sql trực tiếp trong Magento2 như trong magento1.x
Tôi chỉ muốn gọi truy vấn sql trực tiếp trong Magento2 như trong magento1.x
Câu trả lời:
Trong khối bạn chặn hoặc mô hình tệp bạn cần khởi tạo tài nguyên thì bạn cần gọi kết nối
đó là
protected $_resource;
và
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\App\Resource $resource,
array $data = []
) {
$this->_resource = $resource;
parent::__construct($context, $data);
}
để kết nối
protected function getConnection()
{
if (!$this->connection) {
$this->connection = $this->_resource->getConnection('core_write');
}
return $this->connection;
}
dưới đây là ví dụ trong tập tin khối
<?php
/**pradeep.kumarrcs67@gmail.com*/
namespace Sugarcode\Test\Block;
class Joinex extends \Magento\Framework\View\Element\Template
{
protected $_coreRegistry = null;
protected $_orderCollectionFactory = null;
protected $connection;
protected $_resource;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\Registry $registry,
\Magento\Framework\App\Resource $resource,
\Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory,
array $data = []
) {
$this->_orderCollectionFactory = $orderCollectionFactory;
$this->_coreRegistry = $registry;
$this->_resource = $resource;
parent::__construct($context, $data);
}
public function _prepareLayout()
{
return parent::_prepareLayout();
}
protected function getConnection()
{
if (!$this->connection) {
$this->connection = $this->_resource->getConnection('core_write');
}
return $this->connection;
}
public function getDirectQuery()
{
$table=$this->_resource->getTableName('catalog_product_entity');
$sku = $this->getConnection()->fetchRow('SELECT sku,entity_id FROM ' . $table);
return $sku;
}
public function getJoinLeft()
{
$orders = $this->_orderCollectionFactory->create();
$orders->getSelect()->joinLeft(
['oce' => 'customer_entity'],
"main_table.customer_id = oce.entity_id",
[
'CONCAT(oce.firstname," ", oce.lastname) as customer_name',
'oce.firstname',
'oce.lastname',
'oce.email'
]
);
//$orders->getSelect()->__toString(); $orders->printlogquery(true); exit;
return $orders;
}
}
bạn đã sử dụng lệnh gọi cũ cho phiên bản beta core_write và core_read trong RC giống như thế này:
protected _resource;
public function __construct(Context $context,
\Magento\Framework\App\ResourceConnection $resource)
{
$this->_resource = $resource;
parent::__construct($context);
}
lấy bộ chuyển đổi:
$connection = $this->_resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);
lấy bảng và chọn:
$tblSalesOrder = $connection->getTableName('sales_order');
$result1 = $connection->fetchAll('SELECT quote_id FROM `'.$tblSalesOrder.'` WHERE entity_id='.$orderId);
hoàn thành khóa học từ đây
Tôi đã đạt được điều này theo cách sau. Tôi có một tệp tùy chỉnh nơi tôi đang tạo đối tượng của nó và nó hoạt động. Kiểm tra nó một lần.
class Sample extends \Magento\Framework\App\Http implements \Magento\Framework\AppInterface
{
public function sampleMethod()
{
$connection = $this->_objectManager->create('\Magento\Framework\App\ResourceConnection');
$conn = $connection->getConnection();
$select = $conn->select()
->from(
['o' => 'catalog_category_entity_varchar']
)
->where('o.value=?', '2');
$data = $conn->fetchAll($select);
print_r($data);
}
}
Hãy thử và cho tôi biết nếu nó làm việc cho bạn.
Không làm việc cho tôi :(
Đây là tập tin khối của tôi:
<?php
namespace Silver\Customize\Block;
use \Magento\Framework\View\Element\Template;
class Main extends Template
{
protected $connection;
protected $_resource;
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\App\Resource $resource
) {
$this->_resource = $resource;
parent::__construct($context, $data);
}
protected function _prepareLayout()
{
$this->setMessage('Hello');
$this->setName($this->getRequest()->getParam('name'));
}
public function getGoodbyeMessage()
{
return 'Goodbye World';
}
protected function getConnection()
{
if (!$this->connection) {
$this->connection = $this->_resource->getConnection('core_write');
}
return $this->connection;
}
}
Tôi gặp lỗi này: Đối tượng DOMDocument nên được tạo.
Tôi đang thiếu gì?
For Join Query,
protected $_objectManager;
public function __construct(
\Magento\Framework\ObjectManagerInterface $objectManager,
\Test\Vendor\Model\ResourceModel\Vendor $resourceModel
) {
$this->resourceModel = $resourceModel;
$this->_objectManager = $objectManager;
}
$collection = $this->_objectManager->create('Test\Vendor\Model\Vendor')->getCollection();
$vendor_id = 5; //get dynamic vendor id
$collection->getSelect()->join('secondTableName as s2','main_table.entity_id = s2.vendor_id', array('*'))->where("main_table.entity_id = ".$vendor_id);
Test\Vendor\Model\VendorFactory
hoặc Test\Vendor\Model\Vendor\Collection
.
Hãy thử cái này:
//for print log on custom log file.
$writer = new \Zend\Log\Writer\Stream(BP . '/var/log/mylog.log');
$logger = new \Zend\Log\Logger();
$logger->addWriter($writer);
$logger->info('Query cron srarting...: ');
try{
$themeId=273;
$this->_resources = \Magento\Framework\App\ObjectManager::getInstance()
->get('Magento\Framework\App\ResourceConnection');
$connection= $this->_resources->getConnection();
$negotiateTable = $this->_resources->getTableName('table_name');
$sql = "Select * FROM " . $negotiateTable;//". WHERE id = " . $themeId . ";";
$result = $connection->fetchAll($sql);
foreach ($result as $item){
$logger->info('Query cron query data...: '.json_encode($item));
}
}catch (\Exception $e){
$logger->info('Query cron query data exception'.$e->getMessage());
}
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$tableName = $resource->getTableName('table_name');
$attribute_information = "Select * FROM " . $tableName; //check for the custom attribute condition". WHERE id = " . $manufacture . ";";
// fetchOne it return the one value
$result = $connection->fetchOne($attribute_information); ?>
\Magento\Framework\App\Resource
không tồn tại (ít nhất là không trong 2.1.3). Ý bạn làResourceConnection
sao?