Magento2: Підключення до зовнішньої БД Magento


9

Іноді мені потрібно підключитися до різних баз даних, Mysql / Oracle і т. Д. Яка найкраща практика зробити це в Magento2

Відповіді:


4

Це офіційно не підтримується. Ми рухаємося до кращої модуляризації, а абоненти, що надходять через договори на обслуговування, обмежують API, який потрібно було б повторно застосувати (реалізацію за замовчуванням можна замінити за допомогою файлу di.xml), але це не буде простою роботою в Magento 2.0.0 . Ми рухаємось таким чином, але немає ЗНО, коли це буде "легко" зробити.

Наприклад, ви можете використовувати плагіни для перехоплення дзвінків до бази даних або викликів модулів; ви можете використовувати di.xml для заміни реалізацій за замовчуванням; і т. д. Тому є способи це зробити. (Люди іноді роблять це в М1.)


2

Це може бути не найкращою практикою, але в Magento 1 мені колись довелося підключитися до SQL Server, щоб отримати деяку інформацію. Я щойно створив з'єднання і помістив його в Helper, щоб мати змогу отримати його з будь-якої точки системи.

Я не бачу, чому ви не могли зробити те саме в Magento 2 (або принаймні спробувати)


2

ось як мені вдалося це зробити. Не знаю, чи правильно це, але це працює (тільки mysql):

app / тощо / 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',
    ),
  ),
...

додаток / код / ​​Постачальник / Модуль / Модель / 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');
    }

}

додаток / код / ​​Постачальник / Модуль / Модель / 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');
    }

}

додаток / код / ​​Постачальник / Модуль / Модель / ResourceModel / Тест / 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');
    }

}

Сподіваюся, це комусь допоможе.

Мікеле

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.