将评论存储在DB中

时间:2017-04-04 16:22:14

标签: php laravel-5 eloquent laravel-5.4 laravel-eloquent

我正在寻找一种在数据库中存储注释的解决方案,但这并不困难:

在一个表中想要在网站上的几个模块中写评论。

我目前正在使用代码'评论表':

创建一个表格
    public function up()
{
    Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->integer('module_id')->unsigned();
        $table->integer('parent_id')->unsigned();
        $table->text('body');
        $table->timestamps();
    });
}

评论模块表:

    public function up()
{
    //
    Schema::create('comment_module',function (Blueprint $table){
        $table->increments('id');
        $table->string('title',190);
        $table->string('name',190)->unique();
        $table->text('body');
        $table->timestamps();
    });
}

现在一切都还可以,但我有问题,为每篇博客文章,图库等选择所有评论。

博客,图库 - 模块名称。

Map.php 模型的代码

    public function comments(){
    return $this->hasMany(Comment::class,'module_id');
}

CommentModule.php 模型

 public function comments(){
    return $this->hasMany(Comment::class,'module_id');
}

Comment.php

public function module(){
    return $this->belongsTo(CommentModule::class);
}

现在如何传递' mmodule_id' ?

正常使用一个表的任何关系将是这样的:

$map->comments->body . . etc.

但是对于那个建设没有工作,是的我当然可以使用原始查询并使用加入,对吧?

是否有使用Eloquent的选项?

1 个答案:

答案 0 :(得分:0)

恕我直言,我知道您想要将评论附加到多个Eloquent模型。使用Polymorphic Relations

的laravel文档中有一个干净的示例

总结一下,你必须在comments表上添加两个字段:commentable_id(整数)和commentable_type(字符串)。

之后,您在评论模型上声明关系:

public function commentable()
{
    return $this->morphTo();
}

您可以在每个模型中使用comments()关系来附加注释,即:

class Post extends Model
{
    public function comments()
    {
        return $this->morphMany('App\Comment', 'commentable');
    }

class Map extends Model
{
    public function comments()
    {
        return $this->morphMany('App\Comment', 'commentable');
    }

现在您可以照常检索评论:

$post->comments;

将新评论附加到父母:

$post->comments()->create([array of comment attributes]);