无法在现有表上添加外键

时间:2015-04-06 20:36:19

标签: mysql laravel laravel-4 foreign-keys database-migration

public function up()
    {
        Schema::table('partial_trips', function(Blueprint $table)
        {
            $table->unsignedInteger('driver_user_id')->after('main_trip_id');
        });

        Schema::table('partial_trips', function(Blueprint $table)
        {
            $table->foreign('driver_user_id')
                ->references('id')
                ->on('users')
                ->onDelete('cascade');
        });
    }

在初始化表时,我在另一个表中创建了完全相同的FK,具有相同的关系。但是这个不起作用。我收到以下错误:

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or u  
  pdate a child row: a foreign key constraint fails (`bpr`.`#sql-7c82_5  
  7d`, CONSTRAINT `partial_trips_driver_user_id_foreign` FOREIGN KEY (`  
  driver_user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE)

查看其他帖子,关于该问题,我只能找到列不是unsigned或者关系中的一列不存在的情况。在这里,我已经涵盖了这两种情况,并且不知道问题可能是什么......

1 个答案:

答案 0 :(得分:2)

表中有一些数据意味着约束将失败,因为现有行的添加列将设置为NULL。 在迁移内部,默认情况下,每个列定义都不可为空。您必须指定nullable以允许外键的空值。

$table->integer('driver_user_id')->unsigned()->nullable()->after('main_trip_id');