【问题标题】:Laravel additional auth informationLaravel 附加认证信息
【发布时间】:2017-03-10 13:27:15
【问题描述】:

好的,首先我有一个名为 ranks 的表,其中包含行(权限),它们是 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();

这使它成为可能,但我必须从每个控制器和每个视图中访问它。那么我应该把这条线放在哪里才能让它无处不在呢?

【问题讨论】:

  • 一个用户可以拥有1个或多个ranks吗?

标签: laravel laravel-5.3


【解决方案1】:

对于关系,您只需将此方法添加到您的用户模型中

public function rank()
{
    return $this->hasOne(Rank::class);
}

但对于用户的角色/权限,我推荐Zizaco/entrust helper。

【讨论】:

  • 为此,列排名必须为“rank_id”,否则您必须将列名作为参数添加到关系方法中。
  • @tam 如果users 表有rank_id 字段,我的示例将有效。
  • 这就是我刚才所说的。
  • @tam 是的,但是你的问题是什么?有了这个关系,如果你有User 对象,你可以访问你想要的rank 对象。喜欢$user->rank->any_rank_variable,没有任何额外的查询
  • 没问题。从 OP 的问题来看,他的专栏似乎被命名为“等级”,只是想抬起头来。
【解决方案2】:

我不知道我是否正确理解了你的问题。但在我看来,您需要一个数据透视表。

你有一个表:'users'

还有一张桌子:'ranks'

因此,如果您创建一个数据透视表 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’);
    }

在你的排名模型中:

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

【讨论】:

  • 这里不需要数据透视表。但如果 OP 想改变他的方法,这可能是一个不错的建议
猜你喜欢
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多