php - 迁移时表中的 FK 不起作用
问题描述
当我当时为表创建迁移时,其通过以下错误存在问题。
Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1005 Can't create table
yourwebs_veridocedu
。#sql-2c46_8e
(errno: 150 "Foreign key constraint is wrongly forms") (SQL: alter tableuser_role_mappings
add constraintuser_role_mappings_user_id_foreign
foreign key (user_id
) referencesusers
(id
) on delete cascade)
迁移用户角色映射表:
public function up()
{
Schema::create('user_role_mappings', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->integer('group_id');
$table->integer('roleid');
$table->integer('status');
$table->integer('createdby');
$table->integer('modifiedby');
$table->string('publicguid');
$table->string('privateguid');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade');
});
}
角色表迁移:
public function up()
{
Schema::create('userroles', function (Blueprint $table) {
$table->increments('id');
$table->string('rolename');
$table->integer('status')->default(1);
$table->integer('createdby')->default(1);
$table->integer('modifiedby')->default(1);
$table->string('publicguid');
$table->string('privateguid');
$table->timestamps();
});
}
用户表迁移:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name');
$table->string('email',150)->unique();
$table->string('password');
$table->integer('roleid')->unsigned();
$table->rememberToken();
/*Common Fields*/
$table->integer('status');
$table->integer('createdby');
$table->integer('modifiedby');
$table->string('publicguid');
$table->string('privateguid');
$table->timestamps();
/*From other table */
$table->foreign('roleid') ->references('id')->on('userroles')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
表中的 FK 无法迁移。
解决方案
increments
列未签名,您的外键列需要具有相同的签名。因此,您应该像这样更改列:
$table->integer('user_id')->unsigned();
$table->integer('group_id')->unsigned();
推荐阅读
- node.js - 如何使用 Nodejs、Angular 和 MongoDB 为费用管理应用程序构建构建适当的数据库?
- datepicker - Flatpickr 同一页面中的多个日期选择器
- pdf - 不同的pdf对应不同的cmap,如何制作一个全局的cmap,以便处理多个具有相同fontmap的pdf到/toUnicodemap
- python - 如何根据某些条件修改数据框并选择最后 3 行
- elasticsearch - Ambari 沙箱:elasticsearch 端口 9200 无法访问
- save - 在闪亮树中保存和恢复选择
- r - r data.table 过滤器基于满足条件的行数
- python - MEDIAN IF S 使用 Python Pandas 的 groupby
- html - 修复了正文溢出的 CSSGrid 导航栏
- jquery - 如何在 jQuery.repeater 生成的复选框上使用 jQuery.validation?