我可以创建指向唯一组合键的外键吗?
.categories-list{
display: flex;
flex-wrap:wrap;
max-height:50px;
overflow-y:auto;
justify-content: space-between;
li{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
padding: 1rem;
border: 10px solid gray;
margin-right: 1rem;
border-radius: 5px;
&:hover{
background-color: $blue;
color: $white;
border-radius: 5px;
cursor: pointer;
}
img{
width: 30px;
height: 30px;
}
}
}
然后执行此操作:
$table->integer('project_id')->unsigned();
$table->unsignedBigInteger('unique_id');
$table->bigInteger('parent_id')->unsigned()->nullable();
$table->unique(['unique_id', 'project_id'], 'parent_unique_id')->unsigned();
我认为它会起作用但是当我尝试这个时它失败了。
mysql是否允许外键指向唯一的复合字段?或者我应该这样做:
$table->foreign('parent_id')->references('parent_unique_id')->on('todos')->onDelete('cascade');
外键的原因是,在删除父项时,所有指向它的行也会被删除。
刚刚做的问题:
$table->index(['unique_id', 'project_id'], 'parent_index');
$table->foreign('parent_id')->references('parent_index')->on('todos')->onDelete('cascade');
是每个项目的parent_id可能不唯一,因此这意味着删除父项,即使它们属于另一个项目,也会删除所有行。
答案 0 :(得分:1)
试试这个 -
$table->integer('parent_id')->nullable()->unsigned()->index();
$table->foreign('parent_id')->references('parent_id')->on('todos')->onDelete('cascade');
这是另一种选择 -
$table->foreign('parent_id')->references('parent_id')->on('todos')->onDelete('restrict')->onUpdate('no action');
希望这对你有用。