首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel eloquent模型-模型扩展模型

Laravel eloquent模型-模型扩展模型
EN

Stack Overflow用户
提问于 2013-05-15 20:50:35
回答 1查看 6.3K关注 0票数 3

有没有可能用另一个模型来扩展laravel 4 eloquent模型,假设我有一个用户模型扩展了eloquent类,另外还有一个类,一个管理员类,扩展了用户类?

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

编辑:

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 21:25:02

这在原则上是一个好主意,但在实践中却是一个坏主意。如果您的两个模型使用相同的表,并且唯一的区别是字段,则添加模型污染没有任何意义。更糟糕的是,您必须修改Laravel处理关系的方式(一对多),以便在通过其他模型获取用户时智能地返回Administrator或User对象。

请考虑执行以下操作:

代码语言:javascript
复制
 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,但有选择地选择管理员。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16565486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档