A volte ho bisogno di connettermi a diversi database, Mysql / Oracle ecc. Qual è la migliore pratica per farlo in Magento2
A volte ho bisogno di connettermi a diversi database, Mysql / Oracle ecc. Qual è la migliore pratica per farlo in Magento2
Risposte:
Questo non è ufficialmente supportato. Stiamo andando verso una migliore modularizzazione, con i chiamanti che arrivano tramite contratti di servizio per limitare l'API che dovrebbe essere reimplementata (l'implementazione predefinita può essere sostituita utilizzando il file di.xml), ma non sarà un semplice lavoro in Magento 2.0.0 . Ci stiamo muovendo in questo modo, ma nessun ETA quando sarà "facile" da fare.
Ad esempio, è possibile utilizzare plug-in per intercettare le chiamate al database o le chiamate ai moduli; è possibile utilizzare di.xml per sostituire le implementazioni predefinite; ecc. Quindi ci sono modi per farlo. (Le persone lo fanno a volte in M1.)
Potrebbe non essere "best practice" ma in Magento 1 una volta ho dovuto collegarmi a un SQL Server per ottenere alcune informazioni. Ho appena creato la connessione e l'ho inserita in un Helper per poterla recuperare da qualsiasi parte del sistema.
Non vedo perché non potresti fare lo stesso in Magento 2 (o almeno provarlo)
è così che sono riuscito a farlo. Non so se è il modo corretto ma funziona (solo 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 / Venditore / modulo / modello / 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 / code / Venditore / modulo / modello / 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 / code / Venditore / modulo / modello / 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');
}
}
Spero che aiuti qualcuno.
Michele