Laravel 尝试在尝试$blog时获取非对象的属性->;用户->;名称

Laravel 尝试在尝试$blog时获取非对象的属性->;用户->;名称,laravel,Laravel,在我的模型用户中 public function blogs(){ return $this->hasMany('App\Blog'); } 在我的模型博客中 public function user(){ return $this->belongsTo('App\User','user_id'); } 在我的博客控制器中 public function show($id) { $blog = Blog

在我的模型用户中

public function blogs(){
        return $this->hasMany('App\Blog');
    }
在我的模型博客中

  public function user(){
        return $this->belongsTo('App\User','user_id');
    }
在我的博客控制器中

 public function show($id)
    {
        $blog = Blog::find($id);
        dd($blog->user->name);
        return view('admin.pages.blogs.show',compact('blog'));
    }
数据库表用户(id、角色\u id、名称) 如果role_id=1(admin),则结果$blog->user->name为空

若role_id=2(author),那个么结果$blog->user->name就是用户的名字


当角色_id=1时,如何修复您需要从
博客
模型中删除
用户_id

public function user()
{
    return $this->belongsTo(User::class);
}
UPD。在任何情况下,
role\u id
都无关紧要。因此,您需要确保DB包含相关记录。例如:

blogs:
id    user_id    text
1     123        '...'

users:
id    name
123   'Linh'

首先,您要更改
博客
用户
角色
迁移

博客迁移

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();
});
用户迁移

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();
});
角色迁移

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 blogs(){
   return $this->hasMany('App\Blog');
}
public function user(){
   return $this->belongsTo('App\User');
}
BlogController

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

blogs
table need
user\u id
你检查了吗?你确定角色id=1的用户有blog吗?是的,我在blogs table中的user\u id不为null我看不出角色id与此有什么关系,你的id
1
用户是否存在?方法下面的第二个参数是“foreign\u key”,不是本地键。对于此关系,默认使用
user\u id
对关系方法的名称进行修改,因此这与
$this->belongsTo('App\user','id','user\u id')相同按默认设置不正确。。。查看
手机
型号及其
用户
关系。。。“Eloquent通过检查关系方法的名称并在方法名称后面加上
\u id
”确定默认外键名称。这些段落中“parent”的措词很难理解文档中的内容。。。好主意:)