3 回答
TA贡献1804条经验 获得超3个赞
你错误地定义了你的关系。注释模型中有 as 数组,但标签需要多对多关系。要实现这一点,你必须定义一个新表:tags_idscomment-tag
comment-tag
comment_id - unsined big integer
tag_id - unsigned big integer
然后在模型中修改关系,如下所示:Commenttags
class Comment extends Model
{
/**
* The tags that belong to the comment.
*/
public function tags()
{
return $this->belongsToMany('App\Tag');
}
}
这种关系的反面是:
class Tag extends Model
{
/**
* The comments that belong to the tag.
*/
public function comments()
{
return $this->belongsToMany('App\Comment');
}
}
然后,对于预先加载嵌套关系,可以使用“dot”语法:
$post = Post::with(['comments', 'comments.tags'])->find(1);
有关详细信息,请参阅 Laravel 文档中的多对多关系。
TA贡献1895条经验 获得超3个赞
您可以使用
$post = Post::where('id',1)->with(['comments.tags'])->first();
它将加载所有评论以及评论标签
链接搜索中的引用链接 https://laravel.com/docs/6.x/eloquent-relationshipsNested Eager Loading
TA贡献1757条经验 获得超7个赞
更新:您必须修复数据库架构
表结构如下所示:
- posts
- id
- title
- ...
- comments
- id
- active
- post_id
- created_at
- tags
- id
- description
- comment_id
- created_at
// App\Post
class Post extends Eloquent
{
public function comments()
{
return $this->hasMany(Comment::class,'post_id','id');
}
}
// App\Comment
class Comment extends Eloquent
{
public function post()
{
return $this->belongsTo(Post::class);
}
public function tags()
{
return $this->hasMany(Tag::class);
}
}
//App\Tag
class Tag extends Eloquent
{
public function comment()
{
return $this->belongsTo(Comment::class);
}
}
//...
$post = Post::with(['comments', 'comments.tags'])->find(1);
//...
- 3 回答
- 0 关注
- 94 浏览
添加回答
举报