मैं बस Magento2 में सीधे sql क्वेरी कॉल करना चाहता हूं जैसे कि magento1.x में
मैं बस Magento2 में सीधे sql क्वेरी कॉल करना चाहता हूं जैसे कि magento1.x में
जवाबों:
ब्लॉक या मॉडल फ़ाइलों में आपको संसाधन को इनिशियलाइज़ करने की आवश्यकता होती है तब आपको कनेक्शन को कॉल करने की आवश्यकता होती है
अर्थात्
protected $_resource;
तथा
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\App\Resource $resource,
array $data = []
) {
$this->_resource = $resource;
parent::__construct($context, $data);
}
कनेक्शन के लिए
protected function getConnection()
{
if (!$this->connection) {
$this->connection = $this->_resource->getConnection('core_write');
}
return $this->connection;
}
नीचे ब्लॉक फ़ाइल में उदाहरण है
<?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;
}
}
आपने बीटा संस्करण core_write के लिए पुराने कॉल का उपयोग किया है और rc में core_read इस तरह है:
protected _resource;
public function __construct(Context $context,
\Magento\Framework\App\ResourceConnection $resource)
{
$this->_resource = $resource;
parent::__construct($context);
}
एडॉप्टर प्राप्त करें:
$connection = $this->_resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);
तालिका प्राप्त करें और चुनें:
$tblSalesOrder = $connection->getTableName('sales_order');
$result1 = $connection->fetchAll('SELECT quote_id FROM `'.$tblSalesOrder.'` WHERE entity_id='.$orderId);
यहाँ से पूरा कोर्स
मैंने इसे निम्नलिखित तरीके से हासिल किया है। मेरे पास एक कस्टम फ़ाइल है जहाँ मैं इसका ऑब्जेक्ट बना रहा हूँ और यह काम किया है। इसे एक बार जांच लें।
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);
}
}
कोशिश करो और मुझे पता है कि यह आपके लिए काम करता है।
मेरे लिए काम नहीं करता है :(
यहाँ मेरी ब्लॉक फ़ाइल है:
<?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;
}
}
मुझे यह त्रुटि मिलती है: ऑब्जेक्ट DOMDocument बनाया जाना चाहिए।
मुझे किसकी याद आ रही है?
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
या Test\Vendor\Model\Vendor\Collection
।
इसको आजमाओ :
//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
मौजूद नहीं है (कम से कम 2.1.3 में नहीं)। क्या आपका मतलब नहीं हैResourceConnection
?