Magento2: เชื่อมต่อกับฐานข้อมูลนอกวีโอไอพีที่ไม่ใช่ภายนอก


9

บางครั้งฉันจำเป็นต้องเชื่อมต่อกับฐานข้อมูลที่แตกต่างกัน Mysql / Oracle เป็นต้นวิธีที่ดีที่สุดที่จะทำใน Magento2 คืออะไร

คำตอบ:


4

สิ่งนี้ไม่ได้รับการรองรับอย่างเป็นทางการ เรากำลังเคลื่อนไปสู่การทำให้เป็นโมดูลที่ดีขึ้นโดยผู้โทรเข้ามาผ่านสัญญาบริการเพื่อ จำกัด API ที่จะต้องมีการปรับใช้ใหม่ (การใช้งานเริ่มต้นสามารถแทนที่ได้โดยใช้ไฟล์ di.xml) แต่จะไม่ง่ายสำหรับ Magento 2.0.0 . เรากำลังเดินไปทางนั้น แต่ไม่มีการทางพิเศษแห่งประเทศไทยเมื่อมันจะเป็น "ง่าย" ที่จะทำ

ตัวอย่างเช่นคุณสามารถใช้ปลั๊กอินเพื่อสกัดกั้นการเรียกฐานข้อมูลหรือการเรียกใช้โมดูล คุณสามารถใช้ di.xml เพื่อแทนที่การใช้งานเริ่มต้น; เป็นต้นมีวิธีที่จะทำ (บางคนทำสิ่งนี้ใน M1 ในบางครั้ง)


2

อาจไม่ใช่ "วิธีปฏิบัติที่ดีที่สุด" แต่ใน Magento 1 ฉันเคยเชื่อมต่อกับ SQL Server เพื่อรับข้อมูลบางอย่าง ฉันเพิ่งสร้างการเชื่อมต่อและวางไว้ใน Helper เพื่อให้สามารถดึงข้อมูลได้จากทุกที่ในระบบ

ฉันไม่เห็นว่าทำไมคุณไม่ทำแบบเดียวกันกับ Magento 2 (หรือลองอย่างน้อยก็ลอง)


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.