2016-07-25 21 views
0

Ich habe 3 Modelle: Artikel, Serien und SerienKategorien. Wenn ich ein Formular zeige (um es zu erstellen oder zu aktualisieren), muss ich die Serien anzeigen, die zu einer in einem vorherigen Schritt ausgewählten Kategorie gehören. Eine Seriennummer kann zu mehr als einer Kategorie gehören.Yii2. Verwandte Modelle

Im Moment habe ich auf meinem Artikel Modell:

public function getSerialsTypeByCategory() { 
     return (new SerialType)->getByCategory($this->itemCategoryId); 
    } 

Auf meinem SerialType Modell:

public function getByCategory($itemCategoryId) { 

     return SerialTypeItemCategory::find()->select(['serialTypeId'])->where(['itemCategoryId' => $itemCategoryId])->all(); 

    } 

Dies funktioniert, es tut, was ich brauche, aber ... Ist dies der richtige Weg, ? Gibt es einen besseren Weg?

+0

rechts erscheint mir .. der Code an der richtigen Stelle (Modell) und geschrieben in der richtigen Weise (Getter) – scaisEdge

Antwort

2

Es ist nicht falsch, was Sie tun. aber es gibt etwas mehr - Check this link: Working with Relational Data

wenn Sie ->hasOne und ->hasMany verwenden Beziehungen zu definieren, Ihr Modell gewinnt einige zusätzliche Vorteile, wie mit faulen oder eager loading Beitritt:

Item::findOne($id)->with(['categories'])->all(); 

mit Eine Beziehung, Sie können auch ->link und ->unlink verwenden, um verwandte Daten hinzuzufügen/zu löschen, ohne über verknüpfte Felder nachzudenken.

Ferner ist es leicht Beziehungen über Verknüpfungstabelle zu definieren:

class Order extends ActiveRecord 
{ 
    public function getItems() 
    { 
     return $this->hasMany(Item::className(), ['id' => 'item_id']) 
      ->viaTable('order_item', ['order_id' => 'id']); 
    } 
} 
+0

Thanks a Los !, Ich werde über ViaTable recherchieren, zum ersten Mal sehe ich es. – Eduardo

Verwandte Themen