Magento2: Menyambungkan ke DB non Magento eksternal


9

Kadang-kadang saya perlu terhubung ke database yang berbeda, Mysql / Oracle dll. Apa praktik terbaik untuk melakukannya di Magento2

Jawaban:


4

Ini tidak didukung secara resmi. Kami bergerak menuju modularisasi yang lebih baik, dengan penelepon masuk melalui kontrak layanan untuk membatasi API yang harus diimplementasikan kembali (implementasi standar dapat diganti menggunakan file di.xml), tetapi itu bukan pekerjaan mudah di Magento 2.0.0 . Kami bergerak seperti itu, tetapi tidak ada ETA ketika itu akan "mudah" dilakukan.

Misalnya, Anda bisa menggunakan plugin untuk mencegat panggilan basis data atau panggilan modul; Anda bisa menggunakan di.xml untuk mengganti implementasi default; dll. Jadi ada cara untuk melakukannya. (Kadang-kadang orang melakukan ini dalam M1.)


2

Ini mungkin bukan "praktik terbaik" tetapi di Magento 1 saya pernah harus terhubung ke SQL Server untuk mendapatkan beberapa informasi. Saya baru saja membuat koneksi dan meletakkannya di Helper untuk dapat mengambilnya dari mana saja di sistem.

Saya tidak mengerti mengapa Anda tidak dapat melakukan hal yang sama di Magento 2 (atau setidaknya mencobanya)


2

ini adalah bagaimana saya berhasil melakukannya. Tidak tahu apakah itu cara yang benar tetapi berhasil (hanya mysql):

app / etc / env.php

...
  'db' => 
  array (
    'table_prefix' => '',
    'connection' => 
    array (
      'default' => 
      array (
        'host' => 'localhost',
        'dbname' => 'xxxx',
        'username' => 'yyyy',
        'password' => 'zzzz',
        'active' => '1',
      ),
      'myconnection' => 
      array (
        'host' => 'localhost',
        'dbname' => 'somedbname',
        'username' => 'xxxx',
        'password' => 'yyyy',
        'active' => '1',
      ),
    ),
  ),
  'resource' => 
  array (
    'default_setup' => 
    array (
      'connection' => 'default',
    ),
      'myconnection' =>
    array (
      'connection' => 'myconnection',
    ),
  ),
...

app / code / Vendor / Module / Model / Test.php

<?php
namespace Vendor\Module\Model;

use \Magento\Framework\Model\AbstractModel;

class Page extends AbstractModel
{
    const UID = 'uid'; 

    /**
     * Prefix of model events names
     *
     * @var string
     */
    protected $_eventPrefix = 'test'; // parent value is 'core_abstract'

    /**
     * Name of the event object
     *
     * @var string
     */
    protected $_eventObject = 'test'; // parent value is 'object'

    /**
     * Name of object id field
     *
     * @var string
     */
    protected $_idFieldName = self::UID; // parent value is 'id'

    /**
     * Initialize resource model
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('Vendor\Module\Model\ResourceModel\Page');
    }

}

app / kode / Vendor / Modul / Model / ResourceModel / Test.php

<?php
namespace Vendor\Module\Model\ResourceModel;

use \Magento\Framework\Model\ResourceModel\Db\AbstractDb;

class Test extends AbstractDb
{

    protected $connectionName = 'myconnection';


    /**
     * Initialize resource model
     *
     * @return void
     */
    protected function _construct()
    {
        // Table Name and Primary Key column
        $this->_init('testtable', 'uid');
    }

}

app / kode / Vendor / Modul / Model / ResourceModel / Uji / Collection.php

<?php
namespace Vendor\Module\Model\ResourceModel\Test;

use \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection
{

    protected $_idFieldName = \Vendor\Module\Model\Test::UID;

    /**
     * Define resource model
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('Vendor\Module\Model\Test', 'Vendor\Module\Model\ResourceModel\Test');
    }

}

Semoga ini bisa membantu seseorang.

Michele

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.