【问题标题】:onDelete Cascade two sidesonDelete 级联两侧
【发布时间】:2018-03-14 11:31:10
【问题描述】:

我正在使用 Laravel 框架,我有多个连接的表,当从 transactions 表中删除相关事务时,我可以成功地从 operations 表中删除一个操作,但我无法让它在相反,因为它会在迁移以及向operations 表中添加新行时引发错误。

Schema::create('operations', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('car_id')->unsigned();
            $table->string('operation');
            $table->integer('transaction')->unsigned();
            $table->timestamps();

        });

        Schema::table('operations', function($table) {
            $table->foreign('car_id')->references('id')->on('cars')->onDelete('cascade');
            $table->foreign('transaction')->references('id')->on('transactions')->onDelete('cascade');
        });

我需要的是在删除相关操作时也删除事务:

Schema::create('transactions', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->string('status')->index();
            $table->date('date')->index();
            $table->string('user_added');
            $table->string('note')->nullable();
            $table->timestamps();
        });

    Schema::table('transactions', function($table) {
        $table->foreign('id')->references('transaction')->on('operations')->onDelete('cascade');
    });

有没有办法做到这一点?

现在它会在迁移时引发错误:

SQLSTATE[HY000]:一般错误:1215 无法添加外键 约束(SQL:改变表transactions添加约束 transactions_id_foreign 外键 (i d) 引用 operations (transaction) 删除级联)

这是正常的,因为operations 表按顺序排在transactions 之后,即使我将代码的第二部分放在operations 表中,当我开始向表中插入行时它也会引发类似的错误。

感谢您引导我找到解决方案。

【问题讨论】:

标签: laravel laravel-5


【解决方案1】:

看起来您将主键添加为外键

Schema::table('transactions', function($table) {
        $table->foreign('id')->references('transaction')->on('operations')->onDelete('cascade');

请在事务表“operations_id”上添加 1 列并像这样更改您的架构

Schema::table('transactions', function($table) {
$table->foreign('operations_id')->references('id')->on('operations')->onDelete('cascade');

【讨论】:

  • 谢谢,但我避免了,transactions 表不仅用于操作,还有很多东西保存在事务中并与操作等相关,我无法打开 something_id一切。我正在寻找一种更有效的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 2015-02-12
  • 2014-06-01
  • 2020-04-23
相关资源
最近更新 更多