2013-03-23 13 views
5

Ich brauche etwas Hilfe. Ich habe in Magento ein benutzerdefiniertes Modul erstellt, das mit mehreren Tabellen interagieren muss.Zugriff auf Daten aus 2 Tabellen in Magento Custom Modul

Ich habe die die Tabellennamen folgenden verwendet bekommen

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

Ich habe dann folgendes zu meinem Modell

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

Im mysql4 Ordner Ich habe ...

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

Und in Collection.php habe ich ...

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

Also mit

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

Wie kann ich definieren, um zu Support1 oder support2 etc. Ich habe versucht mit ...

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

und

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

aber beide gescheitert Wie soll das funktionieren?

Vielen Dank im Voraus.

Antwort

11

Magento die Klassendefinition aktualisiert keine „ein Modul, eine Datenklasse“ Struktur. Stattdessen kann ein einzelnes Modul viele verschiedene Modelle enthalten. Jede Modellklasse greift auf eine einzelne Tabelle zu.

So gab die Code-Generierungs-Tool Ihnen drei Klassen so etwas wie

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

Diese drei Klassen sind, was ein einziges Modell in Magento bildet.

Also, wenn Sie support1 wollen, müssen Sie drei weitere Klassen

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

Welche

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

Das obige Codebeispiel bekommt ein Modell vom Support-Modul ermöglichen würde,, dessen Name support1 ist.

Die Details sind zu viel für eine einzelne StackOverflow-Antwort, aber wenn Sie weitere Hilfe benötigen, ist dies an older article of mine, die das Erstellen eines Modells von Grund auf ohne Code-Erstellungstools behandelt.

+0

Alan, danke für deine Antwort und es war dein Tutorial, das ich benutzt habe, um meine Erweiterung zu bauen, also vielen Dank dafür, dass es sehr informativ und hilfreich war.Das obige ist die richtige Antwort, aber ich gebe Ihnen ein Plus für Ihren Artikel, da es mir sehr geholfen hat. – JSweete

+0

Sollte 'Mage :: getModel ('support/support1');' (doppelter Doppelpunkt) sein? – todd

3

Versuchen Sie die folgende Ordnerstruktur erstellen und für jede Datei nach Bedarf

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

Großartig danke das hat perfekt funktioniert. – JSweete

Verwandte Themen