【问题标题】:Laravel eloquent model - model extends modelLaravel 雄辩模型 - 模型扩展模型
【发布时间】:2013-05-10 01:13:06
【问题描述】:

是否可以用另一个模型扩展 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;

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

【问题讨论】:

  • 不确定你的意思,你能解释一下你想要达到的目标吗?
  • 为什么你在真正尝试做你描述的事情之前问一个问题,然后根据结果采取行动?我对 Laravel 的 Eloquent 了解不多,但我知道你可以扩展一个类来扩展另一个类,这也是发明 OO 的原因之一。
  • 因为我也想评估一下我的想法是否实用
  • @N.B.:模型的问题在于,虽然你可以做任何事情......并非所有事情都是好主意。在使用关系时,他会导致很多混乱。
  • @N.B.:这个人会引诱莫里茨养成一些非常坏的习惯,而他只有在尝试进行关联时才会注意到。换句话说,还差得很远。反复试验是一件好事,但有时,提出一个想法并看看它是否成功也是一件好事,并为他的所作所为表示敬意。

标签: php laravel laravel-4


【解决方案1】:

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

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

【讨论】:

  • findAdministrator 也可以表示为范围!
猜你喜欢
  • 2021-08-11
  • 2015-08-15
  • 1970-01-01
  • 2019-02-12
  • 2013-06-04
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多