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

无法在迁移Laravel的同时创建主键和前键

蓬长恨
2023-03-14

我试图在一次迁移时在主键中做一个外键。

这是为Laravel 5.7。我尝试了不同的方法来实现我的目标。这是我的最终代码。

    Schema::create('teachers', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->integer('user_id')->unsigned()->primary();
        $table->timestamps();
    });

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

它生成一个普通表,其中“user_id”作为主键,但它不是外键。

共有3个答案

车峻熙
2023-03-14
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTeachersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        if (!Schema::hasTable('teachers')) 
        {
            Schema::create('teachers', function (Blueprint $table) {
                $table->increments('id');
                $table->string('teacher_name');
                $table->unsignedInteger('user_id');
                $table->timestamps();
                $table->foreign('user_id')->references('id')->on('users');

            });
        }       
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('teachers');
    }
}

现在,您需要在教师表中设置用户表的as id的外键

我明白了吗

现在将该列添加到techers表中,并添加外键常量

方法一

添加列的步骤

$table-

添加主键

$table-

解释现在user\u id是教师表中的字段名references('id')是在('users')上引用id是在用户表上

方法二

添加列的步骤

$table-

添加主键

$table-

解释现在user\u id是教师表中的字段名references('id')是在('users')上引用id是在用户表上,unsigned()unsignedinteger添加到列中

如果您的问题没有解决,请在下面评论

希望能有帮助

景辰钊
2023-03-14
Schema::create('teachers', function (Blueprint $table) {
    $table->engine = 'InnoDB';
    $table->integer('user_id')->unsigned()->nullable();
    $table->timestamps();
    $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
});
阮选
2023-03-14

试试这个代码

Schema::create('teachers', function (Blueprint $table) {
        $table->engine = 'InnoDB';
        $table->increments('id');
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->timestamps();
    });
 类似资料:
  • 我正在从事一个项目,我正在使用laravel 5.8。这里我想创建一个外键。我试了很多次,但每次都收到一条关于迁移时间的错误消息。有三个表一个是行业,是小学和学生,这些是第二个表。我想在这两个辅助表trade_id上创建一个外键作为键的名称。 这是交易表(主表)。 这是学生表(辅助表)。 这是放置表(辅助表)。 在迁移时出现错误。

  • 我有一个问题与我的Laravel迁移:( 当我运行php artisan migrate时,它会在外键上停止。 首次迁移 还有第二个 运行命令后,我出现以下错误: [Illumb\Database\QueryException] SQLSTATE[HY000]:一般错误:1005无法创建表gsb_larave.35; sql-176_b9(错误号:150“外键约束格式不正确”)(sql:alter

  • 我想在用户表中添加一个外键: 一个用户有一个城镇(法语为ville),一个城镇可以有多个用户: 我的村庄(城镇)迁移 我重命名了迁移(我不知道这样做是否有好处?),这是我迁移的顺序,正如您所看到的,我在用户之前创建了villes: 我在终端中发现了这个错误: 照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1072键列“villes\u id”在表中不存在(SQL:al

  • 我试图在laravel中创建一个主键-外键关系,但我一直遇到这个错误 我似乎找不到哪里出错了,因为我在查看了SO上的其他答案后,对模式进行了更改。 当我运行时,上面的错误会弹出,这是一个部分迁移。 任何指向这将是真棒,因为我已经寻找了一段时间的解决方案! 谢谢 员工表 部门表 工资表 新增:DB播种机。 根据评论更改了DB种子程序

  • 我已经发现了几十个类似的问题,但没有一个解决方案在我的案例中有效。当我运行“php artisan migrate:fresh”时,它抛出了错误。。。 illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tableadd constraint外键()引用()关于删除级联) > 我检查auth用户表,它

  • 我试图在Laravel中创建外键,但是当我使用artisan迁移我的表时,我被抛出以下错误: 模块迁移表: 课程迁移表: 任何关于我做错了什么的想法,我想现在就得到这个,因为我需要创建很多表,例如用户、客户端、项目、任务、状态、优先级、类型、团队。理想情况下,我想创建包含外键、i... eclients_project和project_tasks等数据的表。 希望有人能帮助我开始。