好的,为了方便起见我有一个名为rank with rows(permissions)的表,它们是一个int,可以是1或0。 用户表有一个排名为id的行。
示例用户表: 姓名:SynteX电邮:*@**.nl等级:2
示例排名表: id:2 permToEdit:1
我可以用以下方式显示排名ID:Auth :: user() - > rank但这对我没有帮助。 我想访问这样的排名行:Auth :: user() - > rank-> permToEdit。如果运行以下查询,则可以执行以下操作:
Auth::user()->rank = DB::table('ranks')->select('color')->where([['id', '=', Auth::user()->rank],])->first();
这使它成为可能,但我必须从每个控制器和每个视图访问它。那么我该把这条线放在哪里,以便在任何地方都可以使用?
答案 0 :(得分:0)
对于关系,您只需将此方法添加到用户模型
即可public function rank()
{
return $this->hasOne(Rank::class);
}
但对于用户的角色/权限,我建议Zizaco/entrust帮助。
答案 1 :(得分:0)
我不知道我是否理解你的问题。但在我看来,你需要一个数据透视表。
您有一张桌子:'用户'
还有一张桌子:'排名'
因此,如果你创建一个数据透视表rank_user(Laravel在这里按字母顺序工作,所以排名第一,你可以在'用户'和'排名'模型中改变它。)
首先,您需要创建数据透视表:
Schema::create(‘rank_user', function(Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->integer('rank_id');
$table->boolean('permToEdit') // withs converts to a ‘tiny int’ in the database
});
然后在您的用户模型中,您需要创建:
public function ranks()
{
return $this->belongsToMany(‘App\Rank’)->withPivot(‘permToEdit’);
}
在你的Rank模型中:
public function users()
{
return $this->belongsToMany(App\User')
->withPivot('permToEdit ');
}
现在,在您的用户模型中,您可以使用以下功能
public function getPermToEdit()
{
Return $this->ranks()->wherePivot(‘permToEdit’, true)->first();
}
或者如果你需要传递特定的用户ID,你可以:
public function getUserPermToEdit($user_id)
{
Return $this->ranks()->wherePivot('user_id', $user_id)->wherePivot(‘permToEdit’, true)->first();
}
如果您对此一无所知,请检查: https://laravel.com/docs/5.3/eloquent-relationships 要么 https://www.youtube.com/watch?v=xIBST5vVq84&list=PLfdtiltiRHWEb-tzSN99Zy-39Y1tKl5DB