我正在用JSTree开发一个目录层次结构。
我正在使用模式生成器设置数据库列和关系。
这是我有的。

 Schema::create('directories', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('text');
        $table->integer('parent_id')->default(0)->unsigned();
        $table->foreign('parent_id')->references('id')->on('directories')->onUpdate('cascade')->onDelete('cascade');
        $table->timestamps();

    });

在迁移过程中我没有错误,但是当我试图插入一个记录时,我得到的错误是
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ('dms'.'directories', CONSTRAINT 'directories_parent_id_foreign' FOREIGN KEY ('parent_id') REFERENCES 'directories' ('id') ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into 'directories' ('name', 'text', 'parent_id', 'updated_at', 'created_at') values (Project, Project, 0, 2018-01-20 12:50:37, 2018-01-20 12:50:37))
这有什么问题。谢谢

最佳答案

您不能将外键set设置为0,而是提供一个真正的id作为parent_iddirectories开始,或者您可以将模式更改为following以允许null作为parent_id

Schema::create('directories', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('text');
    $table->integer('parent_id')->nullable()->unsigned();
    $table->foreign('parent_id')->references('id')->on('directories')->onUpdate('cascade')->onDelete('cascade');
    $table->timestamps();

});

insert方法中,可以跳过parent_id或设置为null

关于php - Laravel:相同表关系错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48356371/

10-10 10:42