SQL多个外键ON DELETE导致#1215错误

时间:2014-05-27 09:44:31

标签: php sql laravel

我有一个包含一些数据并有两个外键的表 一个引用父表的键,另一个引用用户表的键。

此代码失败会引发#1215错误(代码为Laravel):

希望在删除父级时,respondent_id为设置为空,这是一项要求。

// answer forgein key
$table->integer('answer_id')->unsigned();
$table->foreign('answer_id')->references('id')->on('answers')->onDelete('cascade');

// Respondent forgein key
$table->integer('respondent_id')->unsigned();
$table->foreign('respondent_id')->references('id')->on('respondents')->onDelete('set null');

虽然这个有效:

// answer forgein key
$table->integer('answer_id')->unsigned();
$table->foreign('answer_id')->references('id')->on('answers')->onDelete('cascade');

// Respondent forgein key
$table->integer('respondent_id')->unsigned();
$table->foreign('respondent_id')->references('id')->on('respondents');

注意:

  1. 表格均为 innoDB
  2. 两列都是相同的数据类型
  3. 为什么会这样?

1 个答案:

答案 0 :(得分:0)

好像我回答了自己的帖子。

在写这个答案时我有一个想法:"该字段甚至可以为空?" 。然后我对我自己的资源说不,它不可空!

将代码更改为以下内容后;它运作得很好。

// answer forgein key
$table->integer('answer_id')->unsigned();
$table->foreign('answer_id')->references('id')->on('answers')->onDelete('cascade');

// Respondent forgein key
$table->integer('respondent_id')->unsigned()->nullable();
$table->foreign('respondent_id')->references('id')->on('respondents')->onDelete('set null');