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
]);
实际上我有两种用户,它们有两种不同的 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
]);