是否可以使用另一个模型扩展laravel 4 eloquent模型,假设我有一个用户模型扩展了eloquent类,另外还有第二个类,一个扩展用户类的管理员类?
如果我只是将管理员类链接到用户,我必须首先获取用户的管理员属性然后获取管理员属性来访问管理员属性。
编辑:
假设我让管理员没有扩展用户。我必须访问,例如这样的电话号码(管理员属性)
$user = User::find(1);
$phone = $user->administrator->phone;
但是通过让管理员扩展用户,我可以像这样直接访问电话号码
$user = Administrator::find(1);
(请注意,找到管理员的ID与我用来获取用户的ID相同。通常我必须传递管理员数据库中条目的真实ID)
$phone = $user->phone;
同时,可以访问用户类的属性,例如$phone = $user->email;
或者可能有一个更好的解决方案来达到这个目的,或者像这样使用它是没有意义的,如果是这样,请随时告诉我
答案 0 :(得分:4)
原则上这是一个好主意,在实践中是个坏主意。如果两个模型都使用相同的表,并且唯一的区别是字段,则添加模型污染时会有无点。更糟糕的是,您必须修改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
,如果用户是admin,则返回布尔值true,否则返回布尔值false。 findAdministrator
,其行为类似于find
但有选择地选择管理员。
这使得你不能拥有两个基本上是关系的模型(毕竟管理员仍然是一个用户)。它还允许您通过有用的原子方法轻松找出所需内容。