首页 文章

Laravel雄辩的模型 - 模型扩展模型

提问于
浏览
3

是否可以使用另一个模型扩展laravel 4 eloquent模型,假设我有一个用户模型扩展了雄辩的类,另外还有第二个类,一个扩展用户类的管理员类?

如果我只是将管理员类链接到用户,则必须首先获取用户的管理员属性然后获取管理员属性来访问管理员属性 .

编辑:

让's say I have the Administrator not extending the User. I' d必须访问,例如像这样的电话号码(管理员属性) $user = User::find(1); $phone = $user->administrator->phone; 但是让管理员扩展用户我可以像这样直接访问电话号码 $user = Administrator::find(1); (请注意,找到管理员的ID与我使用的ID相同通常我必须在管理员数据库中传递条目的真实ID) $phone = $user->phone; 同时可以访问用户类的属性,例如 $phone = $user->email;

或者可能有一个更好的解决方案来实现这一点,或者像这样使用它是没有意义的,如果是这样,请随时告诉我

1 回答

  • 3

    原则上这是一个好主意,在实践中是一个坏主意 . 如果两个模型都使用相同的表,并且唯一的区别是字段,则添加模型污染时会出现 no point . 更糟糕的是,您必须修改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 但有选择地选择管理员 .

    这使得你不能拥有两个基本上是关系的模型(毕竟管理员仍然是用户) . 它还允许您通过有用的原子方法轻松找出所需内容 .

相关问题