在laravel中使用unique(),mysql是否正确运行onDelete Cascade?

时间:2017-09-14 13:43:32

标签: mysql laravel

我可以创建指向唯一组合键的外键吗?

.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可能不唯一,因此这意味着删除父项,即使它们属于另一个项目,也会删除所有行。

1 个答案:

答案 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');

希望这对你有用。