Wie lade ich Modelldaten, die 2 Tabellen verbinden?


9

Angenommen, ich habe ein einfaches Modell A , das auf Tabelle A abzielt. Jetzt muss ich einige zusätzliche Informationen hinzufügen, damit ich ein Modell B erstellen und diese zusätzlichen Informationen in einer Tabelle B speichern kann, wobei ein Fremdschlüssel auf den Indexschlüssel von Tabelle A zeigt .

Normalerweise werden Verknüpfungen in Sammlungen durchgeführt, aber wenn ich ein Modell lade, wird die Sammlung nicht aufgerufen, sondern nur die resource model.

Wie kann ich ändern Modell A auch Daten aus laden Tabelle B auf load()?


Gute Frage ... Ich mag es
Amit Bera

Es ist eine Art einfache EAV-Implementierung ... Ich habe eine Art Lösung gefunden, aber ich warte auf einen anderen Ansatz und teste ihn, bevor ich ihn veröffentliche
Fra

Antworten:


11

Fügen Sie innerhalb der Ressourcenmodellklasse die folgende Funktion hinzu

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

Wenn Sie aufgerufen haben Mage::getModel('modulename/TableA')->load(1), wird diese Methode mit table_b verknüpft.


Ich denke, limit(1)ist nicht erforderlich: joinLeft()wird genug sein ...
Fra

Ich habe nur ein Beispiel dafür gegeben. Sie können dies entsprechend Ihren Anforderungen ändern.
Sohel Rana

6

Ich kann Ihnen den Ansatz vorschlagen, den ich verwende, und es ist ganz einfach.

Schritte:

  1. Ressourcenmodell von Modell A neu schreiben (Wenn Modell A Ihr Modell und nicht Magento ist, können Sie diesen Schritt überspringen.)

  2. Schreiben Sie die Methode _getLoadSelect () des Ressourcenmodells von Modell A neu. In dieser Methode wird eine Auswahlabfrage generiert, und hier können Sie die anderen Tabellen verknüpfen.


Du warst schneller als ich. +1
Marius
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.