2017-06-08 10 views
0

, was ich zu erreichen versuche, ist ein Basis Modell, das bestimmte Felder und Unter Modelle hat, die noch mehr benutzerdefinierte Felder haben. Ich fand einige Hacky-Lösungen, die ein Feld in der Tabelle verwendeten, um den Subtyp zu definieren, aber das fühlte sich nicht richtig an.Modell Vererbung in Laravel ohne Plugins

So, hier ist ein Beispiel dafür, was ich brauche: Ich habe ein Modell Pet die gemeinsamen Felder wie Namen, Alter, Geschlecht hat. Allerdings möchte ich dieses Modell nicht direkt verwenden (so ist es in Ordnung, wenn es z. B. abstract ist).

Dann habe ich Sub-Modelle wie zum Beispiel:

  • Vogel, dass das Feld hat lengthOfWings
  • Spinne die numberOfEyes
  • Hund hat die Rasse hat

Wie kann das sauber gemacht werden?

+0

Ich denke, die nächste „Laravel“ Art und Weise, dies zu tun polymorphe realtions – milo526

Antwort

0

Wenn Ihr Modell Pet Laravel Modell-Klasse erweitert, können Sie es nicht abstrakt definieren, und ich glaube nicht, dass Sie es von Grund auf neu implementieren wollen

Wenn ich richtig verstehe, die sauberste Art, wie ich denken konnte, wäre hier

Pet Model 
    +--------+----------+--------------------+ 
    |  id | name  | oder_general_field | 
    +--------+----------+--------------------+ 
    |  1 |  dog |    value| 
    |  2 |  cat |    value| 
    |  3 |  bird |    value| 
    +--------+----------+--------------------+ 

Subtype model 

    +------------+----------+ 
    | subtype_id | name  | 
    +------------+----------+ 
    |  1  |mammal | 
    |  2  |not_mammal| 
    +------------+----------+ 


    Mammal model 

    +---+--------+----------+------------+ 
    |id | pet_id | field1 | field2  | 
    +---+--------+----------+------------+ 
    | 1 |  1 | value |  value| 
    | 2 |  2 | value |  value| 
    +---+--------+----------+------------+ 

    Not_Mammal model 

    +----+--------+----------+------------+ 
    | id | pet_id | field1 | field2  | 
    +----+--------+----------+------------+ 
    | 1 |  3 | value |  value| 
    +----+--------+----------+------------+ 

Das Subtyp Modell nicht in der Beziehung verwendet, aber ich würde empfehlen, es zu halten, und wenn Sie ein neues Modell hinzu fügen Namen zu, es ist da, wenn Sie haben wie 100 Submodellen mir vertrauen es wird Ihnen helfen

Dann Sie muss die Beziehungen zwischen den Modellen definieren

Class Mammal Extends Model{ 
    public function pet(){ 
     return $this->belongsTo('App\Pet'); 
    } 
} 

Class Not_Mammal Extends Model{ 
    public function pet(){ 
     return $this->belongsTo('App\Pet'); 
    } 
} 
+0

dank verwendet, aber vergessen, die Säugetiere Sachen. Ich wollte eigentlich einen "Klassenvogel", "Klassenspinne" als Unterklassen von Haustieren. Dann kann ich z.B. 2 Hunde Balu (Rasse Shepard) und Roger (Rasse Bulldog) –

0

Erstellen Sie ein Klasse Tier.

ex:

Klasse Tier erstreckt Modell

{

// some Aussage hier

}

Dann eine andere Klasse erstellen oder Modell

Klasse Dog erweitert Tier {

// Aussage hier

}

Ich hoffe, das hilft

+0

Ihre Klasse Tier erweitert nun die Model-Klasse des Laravel –