我在实践中建立自己的论坛,我建立了具有多态关系的Topic
和Comment
模型,comment
可以属于topic
或另一个{ {1}},这是因为我想嵌套注释。另一个问题是,当我回复该主题时,出现以下错误:
SQLSTATE [HY000]:常规错误:1364字段'parent_id'没有默认值(SQL:插入
,1,App \ Models \ Topic,2019-11-08 20:41: 43,2019-11-08 20:41:43))comment
(comments
,user_id
,{{1} },body
,commentable_id
,commentable_type
)值(1 <\ p> ljlnlnlnlnlnlnlnlnlnln
我的模型和迁移。
主题模型:
updated_at
created_at
评论模型:
class Topic extends Model
{
protected $table = 'topics';
public function author()
{
return $this->belongsTo('App\Models\User', 'user_id');
}
public function comments()
{
return $this->morphMany('App\Models\Comment', 'commentable')->whereNull('parent_id');
}
}
public function up()
{
Schema::create('topics', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('user_id')->index();
$table->foreign('user_id')->references('id')->on('users');
$table->string('title');
$table->text('body');
$table->string('url')->unique();
$table->string('slug')->unique();
$table->boolean('isVisible')->default(false);
$table->timestamps();
});
}
答案 0 :(得分:3)
错误非常明显; parent_id
列没有值(您没有设置一个,并且没有默认值)。将该列设置为nullable
,或传递一个parent_id
在migration
中:
$table->integer('parent_id')->unsigned()->nullable();
答案 1 :(得分:1)
由于对某个主题的评论没有父评论(不是答复),因此parent_id
将为空,但是您的数据库架构不允许该评论,因此请将该列设置为空
$table->integer('parent_id')->unsigned()->nullable();
或将其null
作为默认值
$table->unsignedInteger('parent_id')->default(null);
希望这会有所帮助
答案 2 :(得分:0)
我遇到了这个问题,并通过将我的列添加到fillable属性中来解决了
将parent_id添加到模型注释中的可填充数组中,以允许通过创建和大量方法进行保存
protected $fillable = ['parent_id'];