Question

Je l'ai étendu une collection Magento pour obtenir ma propre collection que je veux utiliser une autre connexion DB. Ce que j'ai essayé de faire est de définir la connexion config.xml comme ceci:

<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>

puis dans mon constructeur majeur, faire:

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);
        }
.....
}

Cela ne semble pas avoir d'effet. Je me serais attendu à une erreur si elle ne fonctionne pas. Que dois-je faire?

Mise à jour: Après plus de débogage, je note que le code ci-dessous renvoie la connexion db d'origine et non celui que je défini dans mon XML. Pourquoi?

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

Était-ce utile?

La solution

Une vérification rapide (voir cas de test ci-dessous) montre en fait ce que vous faites doit être juste Peachy.
Pour cette raison, je soupçonne une erreur dans votre configuration. S'il vous plaît modifier votre message pour inclure votre classe de collection avec au moins c'est des méthodes de __construct et _construct.
En outre, si vous n'utilisez pas le modèle de ressources sales/order, s'il vous plaît inclure avec ses méthodes constructeur, aussi.

Mise à jour: Je viens de remarquer que vous utilisez $resource->getConnection('reportingdb_read'); dans votre constructeur.
Dans le fichier XML de configuration de la connexion est appelée <externaldb_read>.
Note: reportingdb_read = externaldb_read

peut-être thats juste un copier-coller erreur dans votre article, mais sinon, vous devez utiliser
$resource->getConnection('externaldb_read');
Si ce n'est pas la question, s'il vous plaît mettre à jour votre message, encore une fois, et je vais aider à creuser plus loin.


// 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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top