3

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

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

编辑:

假设我的管理员没有扩展用户。我必须像这样访问例如电话号码(管理员属性), $user = User::find(1); $phone = $user->administrator->phone; 但是通过让管理员扩展用户,我可以像这样直接访问电话号码 $user = Administrator::find(1);(请注意,传递给查找管理员的 id 是相同的就像我用来获取用户的那个。通常我必须传递管理员数据库中条目的真实ID) $phone = $user->phone; 同时可以访问用户类的属性,例如$phone = $user->email;

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

4

1 回答 1

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,如果用户是管理员,则返回布尔值 true,否则返回布尔值 false。findAdministrator,其行为类似于find 但有选择地选择管理员。

这允许您没有两个模型来处理本质上的关系(毕竟管理员仍然是用户)。它还允许您通过有用的原子方法轻松挑选出您需要的内容。

于 2013-05-15T13:25:02.427 回答