¿Cómo cargar datos del modelo uniendo 2 tablas?


9

Supongamos que tengo un Modelo A simple que apunta a la tabla A ahora que tengo que agregar información adicional, así que decido crear un Modelo B y guardar esa información adicional en una Tabla B con una clave externa que apunta a la clave de índice de la Tabla A.

Por lo general, las uniones se realizan en colecciones, pero si cargo un modelo, no se llama a la colección, sino que solo resource modelse usa.

¿Cómo puedo modificar el modelo A para cargar también los datos de la Tabla B en load()?


Buena pregunta ... me gusta
Amit Bera

Es un tipo de implementación simple de EAV ... Encontré un tipo de solución, pero estoy esperando otro enfoque y lo pruebo, antes de publicarlo
Fra

Respuestas:


11

Dentro de la clase de modelo de recurso agregue la siguiente función

protected function _getLoadSelect($field, $value, $object)
{
    $select = parent::_getLoadSelect($field, $value, $object);

    $select->joinLeft(
        array('t_b' => 'table_b'),
        $this->getMainTable() . '.id = t_b.id',
        array('columnA'));
    return $select;
}

Cuando llamó Mage::getModel('modulename/TableA')->load(1), este método se unirá con table_b.


Creo que limit(1)no es obligatorio: joinLeft()será suficiente ...
Fra

Acabo de dar un ejemplo para eso. Puede cambiar esto de acuerdo a sus requerimientos.
Sohel Rana

6

Puedo proponerle el enfoque que uso, y es bastante fácil.

Pasos:

  1. Reescribe el modelo de recurso del Modelo A (si el Modelo A es tu modelo y no Magento, entonces puedes omitir este paso)

  2. Reescriba el método _getLoadSelect () del modelo de recurso del Modelo A. La consulta de selección se genera en este método y aquí puede unir sus otras tablas.


Me ganaste a eso. +1
Marius
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.