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

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

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

oleksii.svarychevskyi
quelle
Du warst schneller als ich. +1
Marius