ডাইরেক্ট এসকিউএল কোয়েরিগুলিকে কীভাবে কল করবেন এবং ইন ম্যাজেন্টো 2-তে সংগ্রহের সাথে যুক্ত হন


উত্তর:


18

আপনার ব্লক বা মডেল ফাইলগুলিতে আপনাকে সংস্থান কল করার দরকার পরে সংস্থান শুরু করতে হবে

এটাই

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; 
    }
}

2
\Magento\Framework\App\Resourceবিদ্যমান নেই (কমপক্ষে ২.১.৩-এ নেই)। মানে না ResourceConnection?
জিয়েল বার্কার 21

দয়া করে উত্তরটি নতুন সংস্করণে আপডেট করুন কারণ এটি ঠিক বলে মনে হচ্ছে তবে ম্যাজেন্টো ২.১.৫ এ কাজ করছেন না।
সর্বোচ্চ 23

11

আপনি বিটা সংস্করণ কোর_রাইটের জন্য পুরানো কলটি ব্যবহার করেছেন এবং আর সি তে কোর_আডারটি হ'ল:

 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);

এখান থেকে সম্পূর্ণ কোর্স


6

আমি নিম্নলিখিত পদ্ধতিতে এটি অর্জন করেছি। আমার একটি কাস্টম ফাইল রয়েছে যেখানে আমি এটির اعتراض তৈরি করছি এবং এটি কাজ করেছে worked একবার এটি পরীক্ষা করে দেখুন।

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);
    }

}

চেষ্টা করুন এবং আমাকে জানান যে এটি আপনার পক্ষে কাজ করে কিনা।


কাজ, নিয়ামক থেকে।
জুলখায়েরি বসরুল

9
পরিবর্তে অবজেক্ট ম্যানেজার ব্যবহার না করে নির্ভরতা ইনজেকশন।
জিয়েল বার্কার্স

1

আমার জন্য কাজ করে না :(

আমার ব্লক ফাইলটি এখানে:

<?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;
    } 

}

আমি এই ত্রুটিটি পেয়েছি: অবজেক্ট DOMDocament তৈরি করা উচিত।

আমি কী মিস করছি?


একটি উত্তর না। এছাড়াও, আমি নিশ্চিত না যে কী কাজ করে না। আপনি কোথাও $ সংযোগ-> ফেচআল () উদাহরণ ব্যবহার করুন না
ম্যাকিয়েজ পাপ্রোকি

1
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);

2
ডিআই ম্যানেজারকে ইনজেক্ট করবেন না। নির্ভরতা ইনজেকশন । হয় Test\Vendor\Model\VendorFactoryবা হয় Test\Vendor\Model\Vendor\Collection
নেভভারমাইন্ড

0

আর একবার চেষ্টা কর :

    //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());
    }

1
আপনার কোডটি কী করছে এবং কীভাবে এটি ওপি-র সমস্যা সমাধান করছে (দয়া করে কোডটির বিশেষত কোন অংশ) তা দয়া করে বর্ণনা করুন।
7ochem

0
<?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); ?>

rakeshjesadiya.com/direct-sql-queries-in-magento-2 সমস্ত সরাসরি ক্যোয়ারী চেক করুন।
রাকেশ জেসাদিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.