首页 > 解决方案 > 当我尝试 $blog->user->name 时尝试获取非对象的属性

问题描述

在我的模型用户中

public function blogs(){
        return $this->hasMany('App\Blog');
    }

在我的模特博客中

  public function user(){
        return $this->belongsTo('App\User','user_id');
    }

在我的 BlogController

 public function show($id)
    {
        $blog = Blog::find($id);
        dd($blog->user->name);
        return view('admin.pages.blogs.show',compact('blog'));
    }

数据库表用户 (id,role_id,name) 如果 role_id = 1(admin) 则结果 $blog->user->name 为 null

如果 role_id = 2(author) 那么结果 $blog->user->name 是用户名

当role_id = 1时我该如何解决

标签: laravel

解决方案


首先你改变blogs usersroles迁移。

博客迁移

Schema::create('blogs', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->unsignedBigInteger('user_id');
      $table->foreign('user_id')->references('id')->on('users');
      $table->string('title');
      $table->string('slug')->unique();
      $table->string('image');
      $table->string('body');
      $table->tinyInteger('status')->default(0);
      $table->tinyInteger('is_approved')->default(0);
      $table->integer('view_count')->default(0);
      $table->timestamps();
});

用户迁移

Schema::create('users', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->unsignedBigInteger('role_id')->default(2);
      $table->foreign('role_id')->references('id')->on('roles');
      $table->string('name');
      $table->string('username')->unique();
      $table->string('email')->unique();
      $table->string('password');
      $table->string('image')->default('default.png');
      $table->text('about')->nullable();
      $table->rememberToken();
      $table->timestamps();
});

角色迁移

Schema::create('roles', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('name');
      $table->string('slug')->unique();
      $table->timestamps();
});

用户模型

public function blogs(){
   return $this->hasMany('App\Blog');
}

博客模型

public function user(){
   return $this->belongsTo('App\User');
}

博客控制器

public function show($id)
{
    $blog = Blog::find($id);
    dd($blog->user->name);//check
    return view('admin.pages.blogs.show',compact('blog'));
}

推荐阅读