我正在寻找一种在数据库中存储注释的解决方案,但这并不困难:
在一个表中想要在网站上的几个模块中写评论。
我目前正在使用代码'评论表':
创建一个表格 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的选项?
答案 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]);