Come caricare i dati del modello unendo 2 tabelle?


9

Supponiamo di avere un semplice modello A che abbia come target la tabella A ora devo aggiungere alcune informazioni extra, quindi decido di creare un modello B e salvare quelle informazioni extra in una tabella B con una chiave esterna che punta alla chiave indice della tabella A.

Di solito i join vengono eseguiti nelle raccolte ma se carico un modello la raccolta non viene chiamata, ma resource modelviene utilizzata solo.

Come posso modificare modello A per caricare anche i dati da Tabella B su load()?


Buona domanda ... Mi piace
Amit Bera

È una specie di semplice implementazione EAV ... Ho trovato una sorta di soluzione ma sto aspettando un altro approccio e testarlo, prima di pubblicarlo
Fra

Risposte:


11

All'interno della classe del modello di risorsa aggiungere la seguente funzione

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

Quando hai chiamato Mage::getModel('modulename/TableA')->load(1), questo metodo si unirà a table_b.


Penso che limit(1)non sia necessario: joinLeft()sarà abbastanza ...
Fra

Ho appena dato l'esempio per questo. Puoi cambiarlo in base alle tue esigenze.
Sohel Rana,

6

Posso proporti l'approccio che utilizzo ed è abbastanza semplice.

passi:

  1. Riscrivi il modello di risorsa del modello A (Se il modello A è il tuo modello e non Magento, puoi saltare questo passaggio)

  2. Riscrivi il metodo _getLoadSelect () del modello risorsa del modello A. In questo metodo viene generata la query di selezione e qui puoi unire le altre tabelle.


Mi hai battuto sul tempo. +1
Marius
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.