我要实施此方案
“会员 - 专辑”多对多的关系就是评论。会员可以在任何相册上发表评论。相册可以有任意数量的会员发表评论。可以发布一些评论作为对其他评论的回复。
“reply_to”指的是父评论。也就是说,评论可以有几个回复。
我在我的项目中使用了Eloquent和Lumen 5.5。我已经完成了这两个文档。我知道如何实现M:N,M:1等关系。
我仍然无法使用Eloquent中的自定义中间表模型来了解如何实现此方案。非常感谢任何帮助。
注意:我已从ERD中删除了其他元素以使其变得简单..
答案 0 :(得分:0)
据我所知。 以下是模型中所需的关系。\
Comments model
Comment::belongsTo('Member'); //add namespace of member model
Comment::belongsTo('Albums'); //add namespace of member model
Member model
Member::hasMany('comments');
Album model
Album::hasMany('comments');
如果没有收到reply to
条评论,您可以在Comment::belongsTo('Albums')->whereNull('replyTo');
然后可以通过评论ID获取回复评论。
答案 1 :(得分:0)
试试这个
class Member
{
public function comments()
{
return $this->hasMany(Comment:class, 'Member_id'); // a member may has many comments
}
}
class Album
{
public function comments()
{
return $this->hasMany(Comment::class, 'Album_id'); // an album may has many comments
}
}
class Comment
{
public function parent()
{
return $this->belongsTo(Comment::class, 'reply_to'); // self reference
}
public function member()
{
return $this->belongsTo(Member::class, 'Member_id'); // a comment should belongs to a member
}
public function album()
{
return $this->belongsTo(Album::class, 'Album_id'); // a comment should belongs to an album
}
}
查询:
Album::with(['comments' => function ($query) {
$query->with(['parent', 'member]);
}])->get();