2013-05-15 67 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'也可以表示为一个范围! –