Magento2: Harici bir Magento DB'sine bağlanma


9

Bazen farklı veritabanlarına, Mysql / Oracle vb. Bağlanmak gerekir. Magento2'de bunu yapmak için en iyi uygulama nedir

Yanıtlar:


4

Bu resmi olarak desteklenmemektedir. Yeniden yapılandırılması gereken API'yı kısıtlamak için hizmet sözleşmeleri yoluyla gelen arayanlarla daha iyi modülerleştirmeye doğru ilerliyoruz (varsayılan uygulama di.xml dosyası kullanılarak değiştirilebilir), ancak Magento 2.0.0'da basit bir iş olmayacak . Biz bu şekilde ilerliyoruz, ama yapılması "kolay" olduğunda ETA yok.

Örneğin, veritabanı çağrılarını veya modül çağrılarını durdurmak için eklentileri kullanabilirsiniz; varsayılan uygulamaları değiştirmek için di.xml kullanabilirsiniz; Yani bunu yapmanın yolları var. (İnsanlar bunu bazen M1'de yapar.)


2

"En iyi uygulama" olmayabilir ama Magento 1 bazı bilgiler almak için bir kez bir SQL Server bağlanmak zorunda kaldı. Bağlantıyı yeni oluşturdum ve sistemin herhangi bir yerinden alabilmek için bir Yardımcıya koydum.

Magento 2'de neden aynı şeyi yapamadığını görmüyorum (veya en azından deneyin)


2

ben de bunu yapmayı başardım. Doğru yol olup olmadığını bilmiyorum ama işe yarıyor (sadece mysql):

Uygulama / 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',
    ),
  ),
...

Uygulamanın / kod / Satıcı / Modül / 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');
    }

}

Uygulamanın / kod / Satıcı / Modül / 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');
    }

}

Uygulamanın / kod / Satıcı / Modül / Model / ResourceModel / Test / 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');
    }

}

Umarım birine yardımcı olur.

Michele

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.