2013-03-23 14 views
5

Ho bisogno di aiuto. Ho creato un modulo personalizzato in Magento che deve interagire con più tabelle.Accesso ai dati da 2 tabelle nel modulo personalizzato Magento

ho usato il seguente per ottenere i nomi delle tabelle

<entities> 
    <support1> 
     <table>table1</table> 
    </support1> 
    <support2> 
     <table>table2</table> 
    </support2> 
    <support3> 
     <table>table3</table> 
    </support3>  
    </entities> 

Allora ho aggiunto il seguente al mio modello

public function _construct() 
{ 
    parent::_construct(); 
    $this->_init('support/support1'); 
    $this->_init('support/support2'); 
    $this->_init('support/support3'); 
} 

Nella cartella MySQL4 che ho ...

public function _construct() 
{ 
    $this->_init('support/support1', 'ticket_id'); 
    $this->_init('support/support2', 'dept_id'); 
    $this->_init('support/support3', 'priority_id'); 
} 

E in Collection.php ho ...

public function _construct() 
{ 
    parent::_construct(); 
    $this->_init('support/support1'); 
    $this->_init('support/support2'); 
    $this->_init('support/support3'); 
} 

Quindi, utilizzando

$collection = Mage::getModel('support/support')->getCollection(); 

Come posso definire l'accesso alla Support1 o support2 ecc Ho provato con ...

$collection = Mage::getModel('support/support1')->getCollection(); 

e

$collection = Mage::getModel('support/support')->getCollection('support1'); 

ma entrambi falliti , come dovrebbe funzionare?

Grazie in anticipo.

risposta

11

Magento non ha un "un modulo, una classe di dati" struttura. Invece, un singolo modulo può contenere molti modelli diversi. Ogni classe del modello accede a una singola tabella.

Così, il vostro strumento di generazione di codice che ha dato tre classi qualcosa come

Package_Support_Model_Support        //model 
Package_Support_Model_Resource_Mysql4_Support    //model resource 
Package_Support_Model_Resource_Mysql4_Support_Collection //collection 

Queste tre classi sono ciò che rende un modello unico in Magento.

Quindi, se si voleva Support1, avrete bisogno di più di tre classi

Package_Support_Model_Support1        //model 
Package_Support_Model_Resource_Mysql4_Support1    //model resource 
Package_Support_Model_Resource_Mysql4_Support_Collection1 //collection 

che permetterebbe

Mage::getModel('support/support1'); 

Il codice di esempio sopra ottiene un modellodal modulo supporto il cui nome è support1.

Le specifiche sono troppo per una singola risposta StackOverflow, ma se hai bisogno di ulteriore aiuto questo è an older article of mine che copre la creazione di un modello da zero senza strumenti di creazione del codice.

+0

Alan, grazie per la tua risposta ed è stato il tuo tutorial che ho usato per costruire la mia estensione quindi grazie mille per questo è stato molto istruttivo e utile.Quanto sopra è la risposta giusta, ma sto dando un vantaggio per il tuo articolo in quanto mi ha aiutato molto. – JSweete

+0

Dovrebbero essere 'Mage :: getModel ('support/support1');' (doppio colon) – todd

3

Provare a creare la seguente struttura di cartelle e aggiornare la definizione di classe per ogni file, se necessario

|-/Model 
|---Support1.php 
|---Support2.php 
|---Support3.php 
|------Mysql4 
|--------Support1.php 
|--------Support1 
|----------Collection.php 
|--------Support2.php 
|--------Support2 
|----------Collection.php 
|--------Support3.php 
|--------Support3 
|----------Collection.php 


class <CompanyName>_<ModuelName>_Model_Support[x] extends Mage_Core_Model_Abstract 

class <CompanyName>_<ModuelName>_Model_Mysql4_Support[x] extends Mage_Core_Model_Mysql4_Abstract 

class <CompanyName>_<ModuelName>_Model_Mysql4_Support[x]_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract 
+0

Great thankyou ha funzionato perfettamente. – JSweete

Problemi correlati