SQLSTATE [HY000]:常规错误:1364字段“ parent_id”没有默认值

时间:2019-11-08 20:06:50

标签: php laravel

我在实践中建立自己的论坛,我建立了具有多态关系的TopicComment模型,comment可以属于topic或另一个{ {1}},这是因为我想嵌套注释。另一个问题是,当我回复该主题时,出现以下错误:

  

SQLSTATE [HY000]:常规错误:1364字段'parent_id'没有默认值(SQL:插入commentcommentsuser_id,{{1} },bodycommentable_idcommentable_type)值(1 <\ p> ljlnlnlnlnlnlnlnlnlnln

,1,App \ Models \ Topic,2019-11-08 20:41: 43,2019-11-08 20:41:43))

我的模型和迁移。

主题模型:

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();
    });
}

3 个答案:

答案 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'];