我正在使用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))
这可能是错的。感谢
答案 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
。