Magento2: Kết nối với DB không Magento bên ngoài


9

Đôi khi tôi cần kết nối với các cơ sở dữ liệu khác nhau, Mysql / Oracle, vv Cách thực hành tốt nhất để làm điều đó trong Magento2 là gì

Câu trả lời:


4

Điều này không được hỗ trợ chính thức. Chúng tôi đang hướng tới việc mô đun hóa tốt hơn, với những người gọi đến thông qua các hợp đồng dịch vụ để hạn chế API sẽ phải được triển khai lại (triển khai mặc định có thể được thay thế bằng tệp di.xml), nhưng nó sẽ không phải là một công việc đơn giản trong Magento 2.0.0 . Chúng tôi đang di chuyển theo cách đó, nhưng không có ETA khi nó sẽ "dễ dàng" để làm.

Ví dụ: bạn có thể sử dụng plugin để chặn các cuộc gọi cơ sở dữ liệu hoặc các cuộc gọi mô-đun; bạn có thể sử dụng di.xml để thay thế các cài đặt mặc định; vv Vì vậy, có nhiều cách để làm điều đó. (Đôi khi mọi người làm điều này trong M1.)


2

Nó có thể không phải là "thực tiễn tốt nhất" nhưng trong Magento 1 tôi đã từng phải kết nối với SQL Server để có được một số thông tin. Tôi chỉ cần tạo kết nối và đặt nó vào Trình trợ giúp để có thể truy xuất nó từ bất kỳ đâu trong hệ thống.

Tôi không thấy lý do tại sao bạn không thể làm điều tương tự trong Magento 2 (hoặc ít nhất là thử nó)


2

đây là cách tôi quản lý để làm điều đó Không biết đó có phải là cách chính xác hay không nhưng nó hoạt động (chỉ mysql):

ứng dụng / 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',
    ),
  ),
...

ứng dụng / mã / Nhà cung cấp / Mô-đun / Mô hình / 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');
    }

}

ứng dụng / mã / Nhà cung cấp / Mô-đun / Mô hình / 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');
    }

}

ứng dụng / mã / Nhà cung cấp / Mô-đun / Mô hình / 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');
    }

}

Hy vọng nó sẽ giúp được ai đó.

Michele

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.