2013-05-15 81 views
3

是能夠擴展一個laravel 4口才模型與另一種模型,讓我們說,我有延伸的口才類的用戶模型,並且另外有一個第二類,延長了用戶類別的管理員類?Laravel口才模型 - 模型擴展模型

如果我只是將管理員類連接到用戶,我必須首先獲取用戶的管理員屬性,然後獲取管理員屬性,才能訪問管理員屬性。

編輯:

比方說,我有管理員沒有擴大用戶。我必須訪問例如電話號碼(管理員屬性)這樣的 $user = User::find(1); $phone = $user->administrator->phone; ,但通過讓管理員擴展用戶,我可以直接訪問電話號碼,這可能是 $user = Administrator::find(1);(請注意,傳遞到查找管理員的ID是一樣的一個我用它來獲取用戶。一般情況下我必須通過在管理數據庫中的條目) $phone = $user->phone; 同時真正的ID有可能訪問用戶如類的屬性$phone = $user->email;

或者也許有更好的解決方案來實現這一目標,或者是沒有意義的這樣使用它,如果是的話,請隨時告訴我

+1

不確定你的意思,你能解釋一下你想達到什麼嗎? – Usman

+0

爲什麼在實際嘗試做你所描述的事情之前問一個問題,然後根據結果採取行動呢?我對拉拉維爾的雄辯不甚瞭解,但我知道你可以擴展一門課程來擴展另一個班級,這是OO被髮明的原因之一。 –

+0

因爲我也希望得到我的想法如何實際是 –

回答

3

這在原則上是一個好主意,一個壞主意在實踐。如果兩個模型使用相同的表格,且唯一的區別是一個字段,則沒有點數添加模型污染。更糟糕的是,您必須修改Laravel處理關係(一對多)的方式,以在通過其他模型獲取用戶時智能返回管理員或用戶對象。

考慮這樣做,而不是執行以下操作:

class User extends \Laravel\Eloquent { 
    public function isAdministrator() { return !!$this->is_admin; } 
    public static function findAdministrator($r=false) { 
     if ($r) return self::where("is_admin","=",true)->where("id","=",(int)$r); 
     else return self::where("is_admin","=",true); 
    } 
} 

這樣做打開模型上的兩個新的方法:isAdministrator,如果用戶是管理員,返回布爾值true,布爾否則爲false。​​,其行爲類似find,但有選擇地選擇管理員。

這可以讓你沒有兩種模式,實質上是一種關係(畢竟管理員仍然是用戶)。它還允許你通過有用的原子方法輕鬆地選出你需要的東西。

+0

感謝,我會做這樣 –

+0

'findAdministrator'也可以表示爲一個範圍! –