我正在尝试向我的用户模型添加自定义属性“角色”。我当前的实现是这样的:
User extends Authenticatable
{
protected $appends = array('role');
public $getRoleAttribute()
{
$role = DB::table('acl_user_has_roles')->where('user_id', $this->id)
->value('role');
return $role;
}
}
此实现在很大程度上有效。值得关注的是,此角色属性在$ user实例的生存期内被多次引用。无论何时引用,都会调用getRoleAttribute()函数,然后将执行数据库查询。对我来说似乎有点不必要,所以我试图找到一种方法只运行一次这些查询,最好是在构造模型实例时:
我试图将answer中所述的模型构造函数覆盖到另一个类似的问题:
public $role;
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
$this->role= $this->role();
}
protected function role()
{
$role = DB::table('acl_user_has_roles')->where('user_id', $this->id)
->value('role');
return $role;
}
当我尝试像这样引用角色属性时:
$user = User::find(1);
echo $user->role;
我什么也没得到。
如果我只是将角色属性设置为一些虚拟文本:
$this->role = "Dummy Role";
代替:
$this->role();
然后我可以得到此“虚拟角色”文本。
我在这里想念什么?