Nachdem ich all diese Antworten gelesen, gesucht und einige Tests durchgeführt hatte, fand ich diese Lösung. Hier ist mein Blog, in dem ich die Lösung geschrieben habe .
Bei der Arbeit mit Magento 1.9 wurde ich gebeten, mehrere Lese- und Schreibverbindungen herzustellen. Magento hat die Möglichkeit, Lese- und Schreibverbindungen in der /etc/local.xml zu konfigurieren. Stellen Sie einfach die Tag-Verwendung ein, um Magento wissen zu lassen, welches verfügbar ist.
<default_setup>
<connection>
<!-- LOCALHOST -->
<host>localhost</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</connection>
</default_setup>
<default_read>
<connection>
<use/>
<!-- ANOTHER SERVER -->
<host>other_server</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</use></connection>
</default_read>
<default_write>
<connection>
<use/>
<!-- LOCALHOST -->
<host>localhost</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</use></connection>
</default_write>
Wir können in der gleichen Konfigurationsdatei wie in diesem Testbeispiel n Verbindungen definieren
<test_read>
<connection>
<!-- TEST SERVER -->
<host>test_server</host>
<username>root</username>
<password>123456</password>
<dbname>magento_db</dbname>
<initstatements>SET NAMES utf8</initstatements>
<model>mysql4</model>
<type>pdo_mysql</type>
<pdotype></pdotype>
<active>1</active>
</connection>
</test_read>
Das Limit ist, dass die Verbindungen auf das gesamte System angewendet werden, aber meine Idee ist, nur für bestimmte Ressourcen festzulegen. In diesem Fall habe ich ein benutzerdefiniertes Berichtsmodul, in dem ich nur Leseverbindungen in der Auftragstabelle herstellen möchte. Nach dem Überschreiben der Bestellressource Mage / Sales / Model / Resource / Order.php mache einfach 3 Updates
- Machen Sie ein Flag, um zu erfahren, ob es Zeit ist, die Verbindung $ reportConnection zu ändern.
- Aktualisieren Sie die Funktion _construct (), um die benutzerdefinierte Verbindung zu erstellen und sie dem Array von Ressourcen hinzuzufügen.
- Aktualisieren Sie die Funktion _getConnection (), um zu entscheiden, ob die benutzerdefinierte Verbindung verwendet wird.
//Flagge
public $ reportConnection = false;
/ **
* Fügen Sie einfach die in local.xml 'test_read' definierte Verbindung hinzu
* /
geschützte Funktion _construct () {
$ this -> _ init ('sales / order', 'entity_id');
$ this -> _ resources-> getConnection ('test_read');
}
/ **
* Stellen Sie die Verbindung her, wenn das Flag gesetzt ist
* /
geschützte Funktion _getConnection ($ connectionName) {
if (isset ($ this -> _ connections [$ connectionName])) {
return $ this -> _ connections [$ connectionName];
}
if ($ connectionName == 'read' && $ this-> reportConnection)
$ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ('test_read');
sonst{
if (! empty ($ this -> _ resourcePrefix)) {
$ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection (
$ this -> _ resourcePrefix. '_'. $ connectionName);
} else {
$ this -> _ connections [$ connectionName] = $ this -> _ resources-> getConnection ($ connectionName);
}
}
return $ this -> _ connections [$ connectionName];
}
Der letzte Schritt besteht darin, eine Auftragssammlung aufzurufen, aber die Verbindung test_read zu verwenden.
//Get the Order model
$model = Mage::getModel('sales/order');
//set the flag
$model->getResource()->reportConnection = true;
//get the collection
$collection = $model->getCollection();