บางครั้งฉันจำเป็นต้องเชื่อมต่อกับฐานข้อมูลที่แตกต่างกัน Mysql / Oracle เป็นต้นวิธีที่ดีที่สุดที่จะทำใน Magento2 คืออะไร
บางครั้งฉันจำเป็นต้องเชื่อมต่อกับฐานข้อมูลที่แตกต่างกัน Mysql / Oracle เป็นต้นวิธีที่ดีที่สุดที่จะทำใน Magento2 คืออะไร
คำตอบ:
สิ่งนี้ไม่ได้รับการรองรับอย่างเป็นทางการ เรากำลังเคลื่อนไปสู่การทำให้เป็นโมดูลที่ดีขึ้นโดยผู้โทรเข้ามาผ่านสัญญาบริการเพื่อ จำกัด API ที่จะต้องมีการปรับใช้ใหม่ (การใช้งานเริ่มต้นสามารถแทนที่ได้โดยใช้ไฟล์ di.xml) แต่จะไม่ง่ายสำหรับ Magento 2.0.0 . เรากำลังเดินไปทางนั้น แต่ไม่มีการทางพิเศษแห่งประเทศไทยเมื่อมันจะเป็น "ง่าย" ที่จะทำ
ตัวอย่างเช่นคุณสามารถใช้ปลั๊กอินเพื่อสกัดกั้นการเรียกฐานข้อมูลหรือการเรียกใช้โมดูล คุณสามารถใช้ di.xml เพื่อแทนที่การใช้งานเริ่มต้น; เป็นต้นมีวิธีที่จะทำ (บางคนทำสิ่งนี้ใน M1 ในบางครั้ง)
อาจไม่ใช่ "วิธีปฏิบัติที่ดีที่สุด" แต่ใน Magento 1 ฉันเคยเชื่อมต่อกับ SQL Server เพื่อรับข้อมูลบางอย่าง ฉันเพิ่งสร้างการเชื่อมต่อและวางไว้ใน Helper เพื่อให้สามารถดึงข้อมูลได้จากทุกที่ในระบบ
ฉันไม่เห็นว่าทำไมคุณไม่ทำแบบเดียวกันกับ Magento 2 (หรือลองอย่างน้อยก็ลอง)
นี่คือวิธีที่ฉันจัดการเพื่อทำมัน ไม่ทราบว่าเป็นวิธีที่ถูกต้อง แต่ใช้งานได้ (เฉพาะ 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 / รหัส / ผู้ขาย / โมดูล / รุ่น / 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 / รหัส / ผู้ขาย / โมดูล / รุ่น / 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 / รหัส / ผู้ขาย / โมดูล / รุ่น / 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');
}
}
หวังว่าจะช่วยใครซักคน
Michele