如何仅删除关联的表

时间:2015-06-22 19:13:19

标签: sql laravel migration

我知道如何使用laravel 5.1创建迁移,我有以下代码

 public function up()
    {
        Schema::create('articulos', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('content');
            $table->integer('categoria_id')->unsigned();
            $table->integer('creador_id')->unsigned();
            $table->string('slug', 32);
            $table->timestamps();
        });
        Schema::table('articulos', function($table) {
            $table->foreign('categoria_id')->references('id')->on('categorias');
            $table->foreign('creador_id')->references('id')->on('users');
        });
    }

当我尝试删除带有文章的类别时,我的外键有错误,是否有可能删除此类别?

1 个答案:

答案 0 :(得分:2)

创建外键约束时,您还可以决定约束应该发生什么。例如,如果您想在删除类别时删除所有文章(我猜是您的问题):

cascade

另见documentationon deletion向数据库标识categorias条目的cascade,该表应articulos onDelete('set null')表中的操作。

要进一步阐明此外来约束中的选项,您可以使用:

  • onDelete('restrict')在删除外键后使列值为null
  • onDelete('cascade')(默认行为)如果仍存在条目,则拒绝删除外键
  • onDelete在删除外键后自动删除条目

MySQL的更多信息。请注意,Laravel不需要外键约束来支持关系。有时您可能不需要外键。

除了onUpdate之外,您还可以使用{{1}}。