我目前正在尝试复制类似于论坛的内容,但我对如何创建嵌套注释感到困惑。我理解,对于常规回复,我可以创建一个回复表,并为每个与线程ID匹配的注释运行一个循环。但我不知道如何为嵌套回复轻松做到这一点。
有人可以给我一些建议或指出我正确的方向吗?感谢。
这是我的帖子表的结构:
答案 0 :(得分:8)
您想查看polymorphic relations来解决此问题。您希望能够对帖子和评论发表评论。
我所做的是设置一个可评论的trait并拥有我想添加注释的模型以使用它。这样,如果您想要评论另一个模型,您只需将该特征添加到该模型即可。
Laracasts是laravel和has a good lesson on traits的绝佳资源。
还有一点比这更多,但希望它会让你开始。
您可以像这样设置数据库结构。
用户表
`id` int(10),
`name` varchar(255),
`username` varchar(255)
评论表
`id` int(10),
`user_id` int(10),
`body` text,
`commentable_id` int(10),
`commentable_type` varchar(255)
帖子表
`id` int(10),
`user_id` int(10),
`body` text
你的模特就是这样。
评论模型
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model {
use CommentableTrait;
/**
* Get all of the owning commentable models.
*/
public function commentable()
{
return $this->morphTo();
}
public function user()
{
return $this->belongsTo('App\User');
}
}
发布模型
<?php namespace App;
use CommentableTrait;
use Illuminate\Database\Eloquent\Model;
class Post extends Model {
use CommentableTrait;
}
当然你需要这个特性。
<强>性状强>
<?php namespace App;
use Comment;
trait CommentableTrait {
/**
* List of users who have favorited this item
* @return \Illuminate\Database\Eloquent\Relations\MorphToMany
*/
public function comments()
{
return $this->morphMany('App\Comments\Comment', 'commentable')->latest();
}
/**
* @return \Illuminate\Http\RedirectResponse
*/
public function addComment($body, $user_id)
{
$comment = new Comment();
$comment->body = $body;
$comment->user_id = $user_id;
$this->comments()->save($comment);
return $comment;
}
}