首先 - 请原谅无知,我是Laravel的新手。 :)
我在Laravel玩游戏时,在扩展开箱即用的User
模型时遇到了问题。我想实现一个基本的角色概念,应该简单地表示为User
的属性。
我已创建默认的用户模型和身份验证:
artisan make:auth
从那起,产生了:
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
我还创建了一个UseRoles模型并尝试创建两者之间的关系:
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserRoles extends Model
{
protected $table = 'user_roles';
public function User()
{
$this->belongsTo('App\User', 'user_id', 'id');
}
}
在User
模型中,我添加了:
public function Roles()
{
$this->hasMany('App\UserRoles', 'user_id', 'id');
}
最后,我运行了迁移脚本并启动了服务器,点击了localhost并使用默认的bootstrapped auth登录。
我期望看到的是用户模型的角色集合,但我没有。 print_r显示默认用户模型,没有其他属性。
有什么明显的东西可以忽略吗?
谢谢,
答案 0 :(得分:1)
Roles()
方法只是定义您User
模型与UserRoles
模型之间关系的方法。实际上它返回了一个Relation
对象的实例,你可以在其上玩
没有User
模型中存储的角色的属性:您应该调用Auth::user()->Roles()->get()
对数据库进行查询并返回Collection
UserRoles
1}}
或者,您可以使用将从DB延迟加载关系的动态属性Auth::user()->Roles;
来访问该集合
答案 1 :(得分:1)
不能直接回答您的问题,但在Roles()
和User()
中,您需要返回这些关系return $this->belongsTo('App\User', 'user_id', 'id');