Laravel 5.8:一般错误:1005 无法创建表
Posted
技术标签:
【中文标题】Laravel 5.8:一般错误:1005 无法创建表【英文标题】:Laravel 5.8: General error: 1005 Can't create table 【发布时间】:2021-09-20 21:33:27 【问题描述】:我正在使用 Laravel 5.8 开发我的项目,我只是创建一个迁移,如下所示:
public function up()
Schema::create('user_wallet_transactions', function (Blueprint $table)
$table->bigIncrements('id');
$table->unsignedSmallInteger('user_id');
$table->foreign('user_id')->references('usr_id')->on('users');
$table->unsignedSmallInteger('wallet_id');
$table->foreign('wallet_id')->references('id')->on('wallets');
$table->string('amount');
$table->string('description');
$table->timestamps();
);
但是当我运行它时,我得到了这个错误:
SQLSTATE[HY000]: General error: 1005 Can't create table `nanonew_main`.`user_wallet_transactions` (errno: 150 "Foreign key
constraint is incorrectly formed") (SQL: alter table `user_wallet_transactions` add constraint `user_wallet_transactions_user_id_foreign` foreign key (`user_id`)
references `users` (`usr_id`))
我不知道这里出了什么问题!我的表users
是这样的,字段名为usr_id
:
public function up()
Schema::create('users', function (Blueprint $table)
$table->bigIncrements('usr_id');
$table->string('usr_name')->unique();
$table->boolean('usr_is_admin')->default(0)->comment('0 = admin , 1 = not admin');
$table->boolean('usr_is_active')->default(0);
$table->string('usr_email')->unique()->nullable();
$table->timestamp('usr_email_verified_at')->nullable();
$table->string('usr_password');
$table->rememberToken();
$table->timestamps();
$table->engine = 'InnoDB';
);
而表wallets
也有名为id
的字段:
public function up()
Schema::create('wallets', function (Blueprint $table)
$table->bigIncrements('id');
$table->string('title');
$table->string('name')->unique();
$table->tinyInteger('is_active');
$table->tinyInteger('is_cashable');
$table->timestamps();
);
那么这里的问题是什么?我该如何解决?
我非常感谢你们的任何想法或建议......
提前致谢。
【问题讨论】:
首先您需要迁移users
和wallets
表,然后迁移user_wallet_transactions
。
列的类型必须相同,bigIncrements()
创建一个“UNSIGNED BIGINT”列,而不是“unsignedSmallInteger”。 laravel.com/docs/5.8/migrations#columns
@sta wallets
& users
已迁移。
@brombeer 我将$table->unsignedSmallInteger('user_id');
& $table->unsignedSmallInteger('wallet_id');
更改为` $table->bigIncrements('user_id');` & $table->bigIncrements('wallet_id');
但没有解决问题
应该是 unsignedBigInteger
ex : $table->unsignedBigInteger('user_id');
和 $table->unsignedBigInteger('wallet_id');
这可以解决你的问题
【参考方案1】:
你正在使用bigIncrements
作为主键,所以你的外键也是相同的类型,改变:
$table->unsignedSmallInteger('user_id');
$table->unsignedSmallInteger('wallet_id');
到
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('wallet_id');
或者
$table->bigInteger('user_id')->unsigned();
$table->bigInteger('wallet_id')->unsigned();
【讨论】:
以上是关于Laravel 5.8:一般错误:1005 无法创建表的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE[HY000]:一般错误:1215 无法添加外键约束 Laravel 5.8
如何解决 laravel 迁移错误“一般错误:1005 无法创建表”
“一般错误:1005 无法创建表”使用 Laravel 架构构建和外键