Pregunta

Así que he extendido una colección Magento para obtener mi propia colección, solo quiero usar una conexión DB diferente. Lo que he intentado hacer es definir la conexión en config.xml al igual que:

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

Y luego en mi constructor primordial, haz:

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

Esto no parece tener ningún efecto. Hubiera esperado un error si no funcionara. ¿Qué debo hacer?

ACTUALIZACIÓN: Después de más depuración, noto que este código a continuación devuelve la conexión DB original y no la que definí en mi XML. ¿Porqué es eso?

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

¿Fue útil?

Solución

Una verificación rápida (ver el caso de prueba a continuación) en realidad muestra lo que está haciendo debe ser solo durazno.
Por esa razón, sospecho que algún error en su configuración. Edite su publicación para incluir su clase de colección con al menos es __construct y _construct métodos.
Además, si no está usando el sales/order Modelo de recursos, incluya también con sus métodos de constructor.

ACTUALIZAR:
Acabo de notar que estás usando $resource->getConnection('reportingdb_read'); en tu constructor.
En la configuración XML se llama la conexión <externaldb_read>.
Nota: reportingdb_read != externaldb_read

Tal vez eso es solo un error de copiar y pegar en su publicación, pero si no, debe usar
$resource->getConnection('externaldb_read');
Si ese no es el problema, actualice su publicación, nuevamente, y ayudaré a cavar más.


// 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();
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top