Laravel:相同的表关系错误

时间:2018-01-20 12:52:52

标签: php mysql laravel-5

我正在使用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))

这可能是错的。感谢

1 个答案:

答案 0 :(得分:1)

您不能set 0的外键,而是从parent_id提供directories的真实ID,或者您可以将您的架构更改为以下以允许{ {1}} 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