我有一个Author模型和Blog模型。
我还用author_id
和blog_id
设置了一个表。该表称为“ author_blog” 。
以下是我定义我的人际关系的方式:
作者模型:
public function blogs()
{
return $this->hasMany('App\Blog', 'author_id');
}
博客模型:
public function author()
{
return $this->belongsTo('App\Author', 'blog_id');
}
我认为我正在尝试$blog->author->first_name
。名字是“作者”表上的一列。
我不断得到
试图获取非对象的属性。
有什么想法吗?
更新:
我已经删除了中间表,而是在博客表上放置了一个“ author_id”,并将其缩短了。
作者模型:
public function blogs()
{
return $this->hasMany('App\Blog');
}
博客模型:
public function author()
{
return $this->belongsTo('App\Author');
}
在我的BlogController中,定义视图时,我通过$blogs = Blog::all();
抓取了博客集
在我看来,我只是在博客中循环浏览,以显示每个人的个人风格……
@foreach ($blogs as $blog)
<div>{{ $blog->author->first_name }}</div>
@endforeach
答案 0 :(得分:0)
对于一对多关系,您不需要另一个表来处理外键。
只需在您的author_id
表中添加blogs
外键。然后定义你的关系
像下面一样,
作者模型:
public function blogs()
{
return $this->hasMany('App\Blog', 'author_id');
}
博客模型:
public function author()
{
return $this->belongsTo('App\Author', 'author_id');
}
视图: 在此之前,请确保您的查询返回有效的集合。
@foreach ($blogs as $blog)
<div>@if( $blog->author) {{ $blog->author->first_name }} @endif </div>
@endforeach
有关更多详细信息:https://laravel.com/docs/5.8/eloquent-relationships#one-to-many
答案 1 :(得分:0)
通过belongsToMany
关系,您可以定义中间表(author_blog)
在作者模型中:
public function blogs()
{
return $this->belongsToMany(Blog::class,'author_blog','author_id','blog_id');
}
author_blog =>中间表
author_id => foreignPivotKey
blog_id => relatedPivotKey