当前位置: 首页 > 知识库问答 >
问题:

无法在Laravel中创建主键外键关系

施子民
2023-03-14

我试图在laravel中创建一个主键-外键关系,但我一直遇到这个错误

SQLSTATE[HY000]: General error: 1005 Can't create table `volga_2`.`employees` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `employees` add constraint `employees_dept_id_foreign` foreign key (`dept_id`) references `departments` (`id`))

我似乎找不到哪里出错了,因为我在查看了SO上的其他答案后,对模式进行了更改。

当我运行php artisan migrate时,上面的错误会弹出,这是一个部分迁移。

任何指向这将是真棒,因为我已经寻找了一段时间的解决方案!

谢谢

员工表

Schema::create('employees', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('dept_id')->unsigned();
            $table->foreign('dept_id')->references('id')->on('departments');
            $table->integer('salary_id')->unsigned();
            $table->foreign('salary_id')->references('id')->on('salary');
            $table->string('name');
            $table->string('gender');
            $table->timestamp('date_of_joining');
            $table->dateTime('date_of_birth');
            $table->timestamps();

部门表

Schema::create('departments', function (Blueprint $table) {
        $table->increments('id');
        $table->string('dept_name');
        $table->timestamps();

工资表

Schema::create('salaries', function (Blueprint $table) {
            $table->increments('id');
            $table->string('monthlySalary');
            $table->timestamps();

新增:DB播种机。

factory(App\Employee::class, 25)->create()->each(function ($employee) {
            $department = factory(App\Department::class)->make();
            $employee->department()->save($department);
            $salary = factory(App\Salary::class)->make();
            $employee->salary()->save($salary);
        });

根据评论更改了DB种子程序

factory(App\Department::class, 10)->create()->each(function ($department) {
            $salary = factory(App\Salary::class)->make();
            $department->salary()->save($salary);
            $employee = factory(App\Employee::class)->make();
            $salary->employee->save($employee);
        });

共有1个答案

董鸣
2023-03-14

确保在雇员迁移中引用的表已经存在,以便实际上可以引用它们。您可以通过重命名文件/将您的雇员迁移的文件名中的日期部分更改为在您的部门工资迁移之后。

你也需要改变

$table->foreign('salary_id')->references('id')->on('salary');

$table->foreign('salary_id')->references('id')->on('salaries');

以反映您在工资迁移中使用的相同表名。

https://laravel.com/docs/5.8/migrations#foreign-key-constraints

 类似资料:
  • 我正在从事一个项目,我正在使用laravel 5.8。这里我想创建一个外键。我试了很多次,但每次都收到一条关于迁移时间的错误消息。有三个表一个是行业,是小学和学生,这些是第二个表。我想在这两个辅助表trade_id上创建一个外键作为键的名称。 这是交易表(主表)。 这是学生表(辅助表)。 这是放置表(辅助表)。 在迁移时出现错误。

  • 我试图在一次迁移时在主键中做一个外键。 这是为Laravel 5.7。我尝试了不同的方法来实现我的目标。这是我的最终代码。 它生成一个普通表,其中“user_id”作为主键,但它不是外键。

  • 我有两张这样桌子: 和 我想为..设置外键,但我遇到了以下错误: ALTER TABLE语句与FOREIGN KEY约束“tblPerson_GenderID_FK”冲突。冲突发生在数据库“示例”、表“dbo.tbl性别”、列“id”中。

  • 表a已成功创建... 错误1215(HY000):无法添加外键约束 无法创建表b

  • 我在创建mysql数据库中现有表的外键时遇到了一些问题。 我不想创建一个名为的新表来引用它,使用以下方法: 但我发现了错误: 为了获得更多的信息,我做了: 在我看来,这两个列的类型似乎是匹配的,因为它们都是varchar(45)。(我还尝试将列设置为not null,但这没有解决问题)所以我猜问题一定是。但我不太清楚这意味着什么,也不知道如何检查/修复它。有人有什么建议吗?是什么意思?

  • 我想添加两个表,一个产品表和一个类别表。然后我要将产品表中的一个类别id链接到类别表中的主键。下面是我的代码: SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table添加约束外键()引用())