php - Laravel 在迁移文件上添加外键

标签 php mysql laravel laravel-5.1

我在card_price上有这个结构数据库中的表:

CREATE TABLE IF NOT EXISTS `card_price` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `card_price` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` tinyint(3) unsigned NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

这个结构为users :

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `family` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `username` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

我正在使用 migration 创建此表文件例如:

card_price :

Schema::create('card_price',function(Blueprint $table){
    $table->increments('id');
    $table->string('card_price');
    $table->tinyInteger('user_id')->unsigned();
    $table->foreign('user_id')->references('id')->on('users');
    $table->timestamps();
});

users :

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name','20');
    $table->string('family','25');
    $table->string('username','15');
    $table->string('password','64');
    $table->string('email','20');
    $table->string('remember_token','100');
    $table->timestamps();
});

使用此迁移文件,我尝试使用 user_id 创建外键上card_price表和idusers table 。不幸的是我收到这个错误:

  [Illuminate\Database\QueryException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL
  : alter table `card_price` add constraint card_price_user_id_foreign foreig
  n key (`user_id`) references `users` (`id`))

  [PDOException]
  SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint

最佳答案

由于外部表中的数据类型不匹配,您收到此错误。您应该对引用它的父表和子表列使用相同的数据类型。

card_price表中user_id的数据类型更改为INT UNSIGNED NOT NULL

首先使用以下查询更改您的表:

ALTER TABLE `card_price` 
CHANGE COLUMN `user_id` `user_id` INT UNSIGNED NOT NULL ;

外键引用查询:

ALTER TABLE `card_price` 
ADD CONSTRAINT `fk_users`
  FOREIGN KEY (`user_id`)
  REFERENCES `users` (`id`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;

关于php - Laravel 在迁移文件上添加外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33598346/

相关文章:

mysql - SQL - 只允许插入三列之一(但必须设置一列)

php - 拉维尔 4 : Nest view inside layout with data

php - 代码重复 (PHP)

mysql - 如何将泰卢固语字符插入mysql数据库

php - 无法用数据库中的字符串填充输入字段

php - 无法读取原始 POST 正文数据 - 在此示例中如何执行此操作?

php - 使用 onesignal 向特定用户发送通知

php - 尝试在 DatabaseServiceProvider 中使用单例创建的 ConnectionFactory 类

php - MYSQL 批量插入语法

php - 将产品自定义字段添加到 WooCommerce 已完成订单电子邮件