laravel eloquent 3 个模型之间的关系

laravel eloquent relationships between 3 model

实际上我有两种用户,它们有两种不同的 table(用户和卖家 table)。 我对以下字段发表评论 table:

   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 添加到此 table?如果卖家想回复用户评论。

消息 table 的相同问题。

实际上,好的做法是您必须在用户 table 中添加角色字段来确定用户是用户还是卖家。但是如果你想保持你的 table 不变,你不需要添加 seller_id,只需使用 one to many polymorphic relations。像这样更改您的评论 table 架构:

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
]);