2017-06-08 91 views
0

什麼,我想實現的是具有一定的領域和模式,有更多的自定義字段基地模型。我發現了一些使用表格中的字段來定義子類型的解決方案,但這並不正確。型號繼承沒有插件

因此,這裏是什麼,我需要一個例子: 我有一個模型寵物有像年齡性別共同領域。但是,我不想直接使用這個模型(所以它可以,例如摘要)。

然後,我有子模型一樣,例如:

  • 具有場lengthOfWings
  • 蜘蛛numberOfEyes
  • 品種

這怎麼可以乾淨地完成?

+0

我認爲這樣做最親密的「laravel」的方法是使用多態關係基本 – milo526

回答

0

如果模型寵物擴展laravel的模型類,你不能把它定義抽象的,我不認爲你想從頭

實現它,如果我理解正確的,我能想到的最徹底的方法將

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| 
    +----+--------+----------+------------+ 

這裏的亞型模型不是在關係中使用,但我會建議保持它,而當你添加一個新的模型添加它的名字也在那裏,如果你有一個像100子模型信任我它會幫助你

然後你將必須定義模型之間的關係

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

感謝,卻忘了哺乳動物的東西。我其實想要一個「階級鳥」,「階級蜘蛛」作爲寵物的子類。然後我可以有例如2只狗巴魯(品種謝潑德)和羅傑(品種鬥牛犬) –

0

創建一個類動物。

例如:

類動物擴展型號

{

//這裏的一些聲明

}

然後創建另一個類或模型

Dog類擴展動物 {

//聲明這裏

}

我希望這有助於

+0

你的課動物現在擴展了laravel的Model類 –