【发布时间】:2019-10-23 22:57:26
【问题描述】:
我已经按照书本制作了我的 laravel 程序的角色。问题发生在一个特定的实例中,用户模型中的方法之一总是“弹出”......无论用户拥有 role_id,方法总是显示某个角色的名称,在这种情况下是“主持人”。不知道有什么问题,至少我看不到……
这是用户模型:
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',"avatar"
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function rola(){
return $this->belongsTo("App\Roles", "id");
}
public function posts(){
return $this->hasMany("App\Post");
}
public function comments(){
return $this->hasMany("App\Comment");
}
public function isAdmin()
{//dd($user);
return $this->rola()->where('role', 'administrator');
}
public function isModerator()
{//dd($user);
return $this->rola()->where('role', 'moderator');
}
public function isUser()
{//dd($user);
return $this->rola()->where('role', 'user');
}
public function isPeon()
{//dd($user);
return $this->rola()->where('role', 'peon');
}
}
这是角色模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Roles extends Model
{
public function rola(){
return $this->hasMany("App\User", "role_id");
}
}
例如,如果只是在任何视图中显示:
{{auth()->user()->rola->id}} <br> // 2 <- correct
{{auth()->user()->role_id}} // 3 <- this should be 2 also.
默认情况下,每当新用户注册时,它会自动接收 id 为 4 的“peon”角色。 不知道我的错误在哪里,也许我什么都没看到......
编辑1:
这里是 github repo 的链接,供那些想要了解它的人使用。
【问题讨论】:
-
return $this->belongsTo("App\Roles", "id");应该使用role_id来表示关系,而不是id。