¿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()?

Fra
fuente
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.

Sohel Rana
fuente
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.

oleksii.svarychevskyi
fuente
Me ganaste a eso. +1
Marius