2017-11-27 1 views
2

Wie fügen wir ein Limit für Viele-zu-Viele-Beziehung hinzu. Nach dem Beispiel in der Dokumentation sagen wir, wir haben 3 Tabellen post, category und post_category. Nehmen wir an, ich habe eine Liste von Beiträgen und bei jedem Beitrag die Möglichkeit, eine Kategorie auszuwählen.Add-Limit für Viele-zu-Viele-Beziehung hinzufügen

Wie kann ich die Beziehung "begrenzen", so dass es nicht mehr als 5 Kategorien pro Post und 100 Posts pro Kategorie geben kann?

Ich habe es geschafft, dies mit einer Prüfung zu tun, wenn count(post->books) < 5 auf die Aktion von post_category Controller erstellen, aber bin auf der Suche nach einer Möglichkeit, es zu tun mehr Yii freundlich, wenn das existiert.

Arbeiten an Yii 1.1.14.

Antwort

1

Sie können benutzerdefinierte Validierungsregeln verwenden. Zum Beispiel in Ihrem PostCategory Modell, fügen Sie die folgende Regel

public function rules() 
{ 
    return [ 
     [['post'], 'validateSize'], 
    ]; 
} 

dann überall im Modell hinzufügen validateSize()

public function validateSize($attribute_name,$params){ 
    if(sizeof($this->post->categories) > 4) 
     $this->addError($attribute_name, Yii::t('post', 'You cant have more than 5 categories per post')); 
} 

Dies wird einen Fehler, wenn eine neue Kategorie Zugehörigkeit zu einer Post zu schaffen versuchen, das hat bereits 4 Kategorien

+0

Was meinst du damit: Dies wird einen Fehler geben beim Versuch, eine neue Kategorie zu einem Beitrag, der bereits 4 Kategorien hat, zu erstellen? Ich erstelle unabhängig Beiträge und Kategorien. Sollte ich dann die Validierungsregel im PostCategory-Modell nicht hinzufügen? –

+0

Ich habe Ihre Modelle nicht gesehen, aber was ich aus der Frage verstanden habe, ist, dass Sie eine Eins-zu-viele-Beziehung zwischen Post und Kategorie haben. Ich folgerte daraus, dass Sie ein Feld post_id oder was auch immer in der Kategorie haben müssen, und nicht ein separates Beziehungsmodell. Wenn Sie jedoch ein separates Modell haben, PostCategory, das die beiden verbindet, dann können Sie es auch dort hinzufügen. Beide werden funktionieren, je nachdem wo du den Fehler bekommen willst und wie du deine Modelle verwendest :) – mrateb

+0

Nun, ich denke ich habe alles richtig in meiner ersten Frage geschrieben. Ich habe eine VIELE VIELE Beziehung zwischen Post und Kategorie, was zu einer PostCategory-Tabelle in der Mitte führt. –