laravel - 当我尝试 $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时我该如何解决
解决方案
首先你改变blogs
users
和roles
迁移。
博客迁移
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'));
}
推荐阅读
- python - 如何修复 matplotlib 中所有子图的图例和主标题?
- javascript - Django 不提供开发中的所有 js 文件
- typescript - 函数重载编译错误(此重载签名不兼容)与模板文字类型
- javascript - 使用 MySQL 和 Node.js 从特定类别中获取每个项目的最佳实践是什么?
- next.js - 为什么我的会话在包含刷新令牌时会被清空?
- python - 根据 pyspark 数组列中的多个字符串进行过滤
- python - 从键值对替换数据帧中的子字符串的最快方法
- javascript - How to assign class to template ref? -- VueJS 3 Typescript Component API
- neural-network - 为 PyTorch 数据集创建自定义图像
- c# - 替代(字典
typeParameterValues) 在所有情况下都转换为 ITypeSymbol