Czy można połączyć się z inną bazą danych z Magento i uzyskać dostęp do danych?
Jeśli muszę utworzyć moduł, jak mogę utworzyć moduł, aby uzyskać dostęp do innej bazy danych? Czy jest jakiś samouczek, który mówi o tym samym od zera? Dowolny pomysł?
Czy można połączyć się z inną bazą danych z Magento i uzyskać dostęp do danych?
Jeśli muszę utworzyć moduł, jak mogę utworzyć moduł, aby uzyskać dostęp do innej bazy danych? Czy jest jakiś samouczek, który mówi o tym samym od zera? Dowolny pomysł?
Pierwszą rzeczą, którą musisz zrobić, to utworzyć połączenie w pliku config.xml modułu. Powinien wyglądać podobnie do default_setup
twojego /app/etc/local.xml
. W tym miejscu możesz określić hosta jako hosta lokalnego, a następnie ustawić inną nazwę dbname lub możesz całkowicie określić innego hosta. Użyłem również gniazda, przed którym również działa.
<resources>
<new_db>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[db_username]]></username>
<password><![CDATA[db_password]]></password>
<dbname><![CDATA[db_name]]></dbname>
<model>mysql4</model>
<type>pdo_mysql</type>
<active>1</active>
</connection>
</new_db>
</resources>
Teraz po tym będziesz mógł połączyć się z tą bazą danych i wykonać zapytania w następujący sposób:
$new_db_resource = Mage::getSingleton('core/resource');
$connection = $new_db_resource->getConnection('new_db');
$results = $connection->query('SELECT * FROM table');
Jeśli chcesz to zrobić za pośrednictwem modelu to można określić read
, write
a setup
zasoby w sposób następujący. Zostanie to ponownie wykonane wewnątrz resources
węzła w pliku config.xml i powinieneś zastąpić test
to, co twój model został skonfigurowany jako.
<resources>
<new_db>
<connection>
<host><![CDATA[localhost]]></host>
<username><![CDATA[db_username]]></username>
<password><![CDATA[db_password]]></password>
<dbname><![CDATA[db_name]]></dbname>
<model>mysql4</model>
<type>pdo_mysql</type>
<active>1</active>
</connection>
</new_db>
<test_write>
<connection>
<use>new_db</use>
</connection>
</test_write>
<test_read>
<connection>
<use>new_db</use>
</connection>
</test_read>
<test_setup>
<connection>
<use>new_db</use>
</connection>
</test_setup>
</resources>
<models>
<test>
<class>My_Test_Model</class>
<resourceModel>test_resource</resourceModel>
</test>
<test_resource>
<class>My_Test_Model_Resource</class>
<entities>
<test>
<table>test</table>
</test>
</entities>
</test_resource>
</models>
Sam model spróbuje znaleźć informacje o połączeniu w funkcji getConnection
/app/code/core/Mage/Core/Model/Resource.php
. Jeśli zalogujesz $name
przekazany widać wartości jak poll_write
, tag_write
i cms_read
gdzie pierwsza część pasuje do modeli w sekcji config.xml, w naszym przypadku byłoby widać test_write
, test_read
albo test_setup
. Jeśli nie można znaleźć połączenia dopasowanie to wtedy będzie korzystać z połączenia domyślne core_read
, core_write
lubcore_setup
Po przeczytaniu wszystkich odpowiedzi, przeszukaniu i wykonaniu testu znalazłem to rozwiązanie. Oto mój blog, na którym napisałem rozwiązanie .
Pracując z Magento 1.9 zostałem poproszony o wykonanie wielu połączeń odczytu i zapisu. Magento ma możliwość konfiguracji połączeń do odczytu i zapisu w pliku /etc/local.xml. Wystarczy ustawić użycie tagu, aby Magento wiedział, który jest dostępny.
Możemy zdefiniować n połączeń w tym samym pliku konfiguracyjnym, jak w tym przykładzie testowym
Ograniczeniem jest to, że połączenia są stosowane do całego systemu, ale moim pomysłem jest ustawienie tylko dla niektórych zasobów. W tym przypadku mam niestandardowy moduł raportu, w którym chcę tylko nawiązywać połączenia odczytu w tabeli Zamówienia. Po przesłonięciu Magazynu Zasób Mag / Sprzedaż / Model / Zasób / Order.php Po prostu dokonaj 3 aktualizacji
Ostatnim krokiem jest wywołanie kolekcji zamówień, ale przy użyciu połączenia test_read.
źródło
W swoim module etc / config.xml dodaj następujący kod:
Aby uzyskać dane z tabeli przy użyciu nowej bazy danych:
źródło