是否有可能用另一个模型扩展laravel 4雄辩模型,假设我有一个用户模型扩展雄辩类,另外还有第二个类,一个管理员类扩展用户类?
如果我只是将管理员类链接到用户,我必须首先获得用户的管理员属性,然后获得admins属性来访问管理员属性。
编辑:假设管理员没有扩展用户。我必须像这样访问电话号码(管理员属性)
$user = User::find(1);
$phone = $user->administrator->phone;
但是通过让管理员扩展用户,我可以像这样直接访问电话号码$user = Administrator::find(1);
(注意,用于查找管理员的id与我用于获取用户的id相同。通常,我必须传递管理员数据库中条目的真实id)$phone = $user->phone;
同时也可以访问用户类的属性,例如:$phone = $user->email;
或者可能有更好的解决方案来实现这一点或者像这样使用它没有意义,如果是这样,请随时告诉我
这在原则上是一个好主意,在实践中是一个坏主意。如果两个模型使用同一个表,唯一的区别是一个字段,那么添加模型污染就没有意义。更糟糕的是,您必须修改Laravel处理关系(一对多)的方式,以便在通过其他模型获取用户时智能地返回Administrator或User对象。
可以考虑这样做:
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。findAdministrator
,它的行为和find
一样,但是有选择性地选择管理员。
这允许你没有两个模型本质上是一个关系(管理员仍然是一个用户,毕竟)。它还允许您通过有用的原子方法轻松地挑选出所需的内容。