Frage

Deshalb habe ich eine Magento -Sammlung erweitert, um meine eigene Sammlung zu erhalten, nur ich möchte eine andere DB -Verbindung verwenden. Ich habe versucht zu definieren, die Verbindung in config.xml Like SO:

<global>
    <resources>
        <externaldb_write>
            <connection>
                <use>externaldb_database</use>
            </connection>
        </externaldb_write>
        <externaldb_read>
            <connection>
                <use>externaldb_database</use>
            </connection>
        </externaldb_read>
        <externaldb_setup>
            <connection>
                <use>core_setup</use>
            </connection>
        </externaldb_setup>
        <externaldb_database>
            <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>
        </externaldb_database>
    </resources>
</global>

Und dann in meinem überragenden Konstruktor:

class VMR_Customreports_Model_Resource_Storeoverview_Collection extends     Mage_Reports_Model_Resource_Order_Collection
{
        public function __construct()
        {
                parent::__construct();

                $resource = Mage::getSingleton('core/resource');
                $conn = $resource->getConnection('externaldb_read');

                $this->setConnection($conn);
        }
.....
}

Dies scheint keinen Effekt zu haben. Ich hätte einen Fehler erwartet, wenn es nicht funktioniert hätte. Was kann ich tun?

UPDATE: Nach mehr Debugging stelle ich fest, dass dieser Code unten die ursprüngliche DB -Verbindung zurückgibt und nicht die in meinem XML definierten. Warum ist das so?

$conn = $resource->getConnection('externaldb_read');

War es hilfreich?

Lösung

Eine schnelle Überprüfung (siehe Testkoffer unten) zeigt tatsächlich, was Sie tun, sollte nur pfirsichfarben sein.
Aus diesem Grund vermute ich einen Fehler in Ihrer Konfiguration. Bitte bearbeiten Sie Ihren Beitrag, um Ihre Sammelklasse mit zumindest in den Kollektion einzuschließen __construct und _construct Methoden.
Auch wenn Sie die nicht verwenden sales/order Ressourcenmodell, bitte geben Sie es auch mit den Konstruktormethoden ein.

AKTUALISIEREN:
Ich habe gerade bemerkt, dass Sie es verwenden $resource->getConnection('reportingdb_read'); in Ihrem Konstruktor.
In der Konfiguration XML wird die Verbindung aufgerufen <externaldb_read>.
Notiz: reportingdb_read != externaldb_read

Vielleicht ist das nur ein Kopier- und Einfügenfehler in Ihrem Beitrag, aber wenn nicht, müssen Sie verwenden
$resource->getConnection('externaldb_read');
Wenn dies nicht das Problem ist, aktualisieren Sie Ihren Beitrag noch einmal und ich werde helfen, weiter zu graben.


// Test to confirm a connection set via setConnection() on a 
// Mage_Reports_Model_Resource_Order_Collection instance is used
// to load the collection data.
class Reports_CollectionTest extends PHPUnit_Framework_TestCase
{
    public static function setUpBeforeClass()
    {
        require_once 'app/Mage.php';
        Mage::setIsDeveloperMode(true);
        Mage::app('admin');
    }

    protected function getConnectionMock()
    {
        $mockSelect = $this->getMockBuilder('Varien_Db_Select')
            ->disableOriginalConstructor()
            ->getMock();

        $mockConn = $this->getMockBuilder('Varien_Db_Adapter_Pdo_Mysql')
            ->disableOriginalConstructor()
            ->getMock();

        $mockConn->expects($this->once())
            ->method('select')
            ->will($this->returnValue($mockSelect));

        $mockConn->expects($this->once())
            ->method('fetchAll');

        return $mockConn;
    }

    /**
     * @test
     */
    public function testCollectionConnection()
    {
        $mockCon = $this->getConnectionMock();

        $collection = new Mage_Reports_Model_Resource_Order_Collection;
        $collection->setConnection($mockCon);

        $this->assertSame($mockCon, $collection->getConnection());
        $collection->load();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top