3款

2015-11-05 54 views
1

之間Laravel 5雄辯的關係我有3種型號:3款

  1. 父親
  2. 兒子
  3. 孫子

的關係是顯而易見的,一個父親可以有許多的兒子和他的兒子可以有許多孫子。

我想達到的是找出父親有多少孫子

我知道,要找出他有多少兒子有我要使用這樣的:

Father::find(1)->sons->count(); 

但我怎麼能找出多少個孫子,他有?這裏

class Father 
{ 
    public function grandsons() 
    { 
     return $this->hasManyThrough('GrandSon', 'Son'); 
    } 
} 

檢查參考:

+0

你需要循環穿過兒子,找出每個兒子有多少孫子,然後總計他們。不幸的是我不認爲雄辯能夠以更簡單的方式做到這一點。在這個特殊情況下,我想知道是否值得編寫一個手動SQL查詢來返回父親的孫子數,然後將其稱爲父:: find(1) - > getGrandsonCount();或者其他的東西。 –

+0

這種關係很明顯。但結構不是。父親是唯一的桌子。還有一張兒子的桌子嗎?那麼,你有一個'M..N'的橋嗎?或者你只是自己將父親連接到父表。 (使其本質上是人桌) – cjds

+0

每個模型都有一張桌子,很明顯。父親模型$ this-> hasMany('App \ Son');兒子模型$ this-> hasMany('App \ Grandson');兩者之間有一對多的關係。 – paulalexandru

回答

1

除@ jsphpl的答案,你也可以繼續鏈接,但使用方法而不是屬性調用。

Father::find(1)->sons()->grandsons()->grandgrandsons()->count(); 

這是因爲sons()返回的關係,而不是一個集合,因此grandsons()將繼續從sons()查詢構建查詢。 grandgrandsons()也適用。