laravel 3种模型之间的雄辩性关系

时间:2019-12-04 14:45:17

标签: laravel eloquent relationship database-relations

实际上,我有两种类型的用户,它们具有两个不同的表(用户表和卖方表)。 我有此字段的注释表:

   Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('user_id')->unsigned()->nullable();
        $table->foreign('user_id')->references('id')->on('users');                         
        $table->integer('parent_id')->unsigned()->default(0);
        $table->text('comment_text');
        $table->integer('commentable_id')->unsigned();
        $table->string('commentable_type');
        $table->timestamps();
    });

如何将Seller_id添加到此表?如果卖家想回应用户评论。

消息表相同的问题。

1 个答案:

答案 0 :(得分:0)

实际上,好的做法是您必须在用户表中添加一个角色字段,该字段确定用户是用户还是卖方。但是,如果您希望保持表格不变,则无需添加Seller_id,只需使用one to many polymorphic relations。像这样更改您的注释表架构:

Schema::create('comments', function (Blueprint $table) {
    $table->increments('id');                    
    $table->integer('parent_id')->unsigned()->default(0);
    $table->text('comment_text');
    $table->integer('commentable_id')->unsigned();
    $table->string('commentable_type');
    $table->timestamps();
});

然后在用户和卖方模型中,必须添加如下所示的关系方法:

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

在这样的评论模型中:

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

然后您可以像这样获得卖方评论:

$seller = App\Seller::find(1);
$seller->comments;

要保存卖家的评论,您可以使用:

$seller = App\Seller::find(1);

$comment = $seller->comments()->create([
    'comment_text' => 'A new comment.',
    // Add other field
]);