【发布时间】:2016-04-07 05:32:44
【问题描述】:
我正在使用 laravel 5.1 开发一个用户管理网站。
不允许用户注册,但他们可以查看他们的个人资料。注册只能由管理员完成,所以我有两种类型的用户(管理员和普通用户)。
我正在学习本教程: https://www.youtube.com/watch?v=8AQLUZ0X9ME 在我到达用户模型之前一切都很好
用户表:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->softDeletes();
$table->integer('role_id')->unsigned();
$table->timestamps();
});
角色表:
public function up()
{
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('role_name');
//
});
}
榜样:
class Role extends Model
{
protected $table = 'roles';
protected $fillable = ['role_name'];
public function users()
{
return $this->hasMany('App\User');
}
用户模型:
public function role(){
return $this->belongsTo('App\Role','role_id');
}
public function hasRole($title){
$user_role = $this->role();
if(!is_null($user_role)){
$user_role = $user_role->role_name; //here is the problem with role_name
}
return ($user_role===$title)?true:false;
}
在 PHPStorm 中,role_name 以黄色突出显示,并表示
在类中找不到字段“role_name” \Illuminate\Database\Eloquent\Relations\BelongsTo less... (Ctrl+F1) 在主题类中找不到引用的字段。注意:检查不是 对“stdClass”或派生类型的对象执行。
我创建了 3 个中间件 Update、Create 和 Delete,它们都有相同的句柄函数:
public function handle($request, Closure $next, $Admin)
{
$User = $request->user();
return ($User->hasRole($Admin))?$next($request):response(view('errors.401'),401);
}
路线文件:
Route::get('/users','UserController@index');
Route::post('/users/create',['middleware'=>'create:Admin','uses'=>'UserController@store']);
Route::patch('/users/{id}',['middleware'=>'update:Admin','uses'=>'UserController@update']);
Route::delete('/users/{id}',['middleware'=>'delete:Admin','uses'=>'UserController@destroy']);
每当我打开创建页面时,我都会收到此错误:
“C:\wamp\www\laravelU\project 中的ErrorException - Copy5\app\User.php 第 42 行:未定义的属性: Illuminate\Database\Eloquent\Collection::$role_name"
我已经处理这个代码 3 个晚上我需要你的帮助。 是否有任何更简单的方法可以在不使用包的情况下实现我的目标?
【问题讨论】:
-
第42行是哪一行??
-
用户模型:$user_role = $user_role->role_name; //这是role_name的问题
标签: laravel laravel-5.1