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

Posted

技术标签:

【中文标题】SQLSTATE[HY000]:一般错误:1364 字段“parent_id”没有默认值【英文标题】:SQLSTATE[HY000]: General error: 1364 Field 'parent_id' doesn't have a default value 【发布时间】:2019-11-08 20:06:50 【问题描述】:

我正在建立自己的论坛作为练习,我设置了具有多态关系的TopicComment模型,comment可以属于topic或另一个comment,这是因为我想要有嵌套的 cmets。另一个问题是当我回复该主题时,我收到以下错误:

SQLSTATE[HY000]: 一般错误: 1364 Field 'parent_id' doesn't have a default value (SQL: insert into comments (user_id, body, commentable_id, commentable_type, @987654331 @, created_at) 值 (1 ljlnlnlnlnlnlnllnlnlnlnlnln

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

我的模型和迁移。

主题模型:

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

评论模型:

class Comment extends Model

    protected $table = 'comments';

    public function author()
    
        return $this->belongsTo('App\Models\User', 'user_id');
    

    public function replies()
    
        return $this->hasMany('App\Models\Comment', 'parent_id');
    

public function up()

    Schema::create('comments', function (Blueprint $table) 
        $table->bigIncrements('id');
        $table->integer('user_id')->unsigned();
        $table->integer('parent_id')->unsigned();
        $table->integer('commentable_id')->unsigned();
        $table->string('commentable_type');
        $table->text('body');
        $table->timestamps();
    );

【问题讨论】:

【参考方案1】:

错误很明显; parent_id 列没有值(您没有设置值,也没有默认值)。将列设置为nullable,或传递parent_id

migration:

$table->integer('parent_id')->unsigned()->nullable();

【讨论】:

【参考方案2】:

由于对某个主题的评论没有父评论(不是回复),因此 parent_id 将为空,但您的数据库架构不允许,请将列设为可空

$table->integer('parent_id')->unsigned()->nullable();

或将null 作为默认值

$table->unsignedInteger('parent_id')->default(null);

希望对你有帮助

【讨论】:

php 语言中,如果没有预先给定值,则默认将 null 类型分配给变量。这允许更容易地创建复杂的语义数据库。可以通过将父 ID 传递给评论部分来解决此问题。【参考方案3】:

我遇到了这个问题并通过将我的列添加到可填充属性来解决

将 parent_id 添加到模型中的可填充数组 Comment ,以允许通过 create 和 mass 方法进行保存

protected $fillable = ['parent_id'];

【讨论】:

以上是关于SQLSTATE[HY000]:一般错误:1364 字段“parent_id”没有默认值的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE [HY000]:一般错误:1364 字段“标题”没有默认值

SQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值

SQLSTATE [HY000]:一般错误:1364 字段“author_id”没有默认值

SQLSTATE[HY000]:一般错误:1364(Laravel 用 eloquent 创建新行)

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

错误 SQLSTATE [HY000]:一般错误:1364 字段“名称”没有默认值(SQL:插入“收藏夹”()值())