本文共 1117 字,大约阅读时间需要 3 分钟。
是否有可能用另一个模型扩展laravel 4雄辩的模型,假设我有一个扩展雄辩的类的用户模型,另外还有第二个类,即扩展了用户类的管理员类?
如果我只是将管理员类链接到用户,则必须先获取用户的管理员属性,然后获取admins属性,才能访问管理员属性.
编辑:
假设我让管理员不扩展用户.我必须访问例如像这样的电话号码(管理员属性)
$user =用户:: find(1);
$phone = $user->管理员->电话;
但是通过让管理员扩展用户,我可以像这样直接访问电话号码
$user =管理员:: find(1); (请注意,为找到管理员而传递的ID与我用来获取用户的ID相同.通常,我必须在Administrator数据库中传递条目的真实ID)
$phone = $user-> phone;
同时,可以访问用户类别的属性,例如$phone = $user->电子邮件;
或者也许有更好的解决方案来实现这一目标,或者像这样使用它毫无意义,如果是这样,请随时告诉我
解决方法:
原则上,这是一个好主意,而实际上却是一个坏主意.如果两个模型都使用相同的表,并且唯一的不同是字段,则添加模型污染毫无意义.更糟糕的是,您必须修改Laravel处理关系(一对多)的方式,以便在通过其他模型吸引用户时智能地返回Administrator或User对象.
考虑改为执行以下操作:
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,则返回boolean true,否则返回boolean false. findAdministrator,其行为类似于find,但有选择地选择管理员.
这使您不必为本质上的关系使用两个模型(毕竟,管理员仍然是用户).它还使您可以通过有用的原子方法轻松地选择所需的内容.
标签:laravel,laravel-4,php
来源: https://codeday.me/bug/20191030/1971452.html
转载地址:http://cbtnx.baihongyu.com/