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

添加外键到迁移(Laravel)

詹钊
2023-03-14

我花了一整天的时间试图弄清楚下面的迁移发生了什么。

这是表的迁移。我的想法是使用“id_stays_abroad”和“user_id”作为外键。

    class CreateBookingStaysAbroad extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('booking__stays__abroads', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
            $table->unsignedInteger('id_stays_abroad')->nullable();
            $table->unsignedInteger('user_id')->nullable();
            $table->string('status')->nullable();
            $table->date('departure_date');
            $table->date('return_date');
            $table->integer('number_weeks');

        });

    }

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

这是添加外键的另一个迁移

   class AddForeignKeyBookingStaysAbroadTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('booking__stays__abroads', function($table) {

            $table->foreign('id_stays_abroad')
                    ->references('id')
                    ->on('stays_abroads');

            $table->foreign('user_id')
                    ->references('id')
                    ->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
            Schema::table('booking__stays__abroads', function (Blueprint $table) {
            $table->dropForeign('booking__stays__abroads_id_stays_abroad_foreign');
            $table->dropForeign('booking__stays__abroads_user_id_foreign');

    });
  }
}

当我运行php artisan迁移时,我遇到了以下错误:

SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tablebooking\u stays\u abroadsadd constraintbooking\u stays\u abroads\u id\u stays\u Outside\u foreign外键(id\u stays\u Outside)引用

伙计们,先谢谢你们。


共有3个答案

后树
2023-03-14

我也是Laravel的新手,但我认为您可能需要更改这两种数据类型:

$table->unsignedInteger('id_stays_abroad')->nullable();
$table->unsignedInteger('user_id')->nullable();

$table->unsignedBigInteger('id_stays_abroad')->nullable();
$table->unsignedBigInteger('user_id')->nullable();

值得一试!

洪飞扬
2023-03-14

首先,属性应命名为“stays\u Outside\u id”,而不是“id\u stays\u Outside”。

问题是stays_abroads.idstays_abroid_id的大小和性质应该匹配(在本例中为无符号大整数)。

此外,数据透视表中不需要ID。您不会在laravel中为其声明模型。

表的名称应反映数据透视表的两面,因此将其命名为stays\u Outside\u user(单数和字母顺序用下划线分隔)

class CreateBookingStaysAbroad extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('stays_abroad_user', function (Blueprint $table) {
            $table->unsignedBigInteger('stays_abroad_id')->nullable();
            $table->unsignedBigInteger('user_id')->nullable();
            $table->string('status')->nullable();
            $table->date('departure_date');
            $table->date('return_date');
            $table->integer('number_weeks');
            $table->timestamps();
            $table->foreign('stays_abroad_id')
                    ->references('id')
                    ->on('stays_abroads');

            $table->foreign('user_id')
                    ->references('id')
                    ->on('users');
        });

    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('stays_abroad_user');
    }
}
程昕
2023-03-14

对于id和id\u stays\u Outside,您没有使用相同的列定义。使用无符号BigInteger,而不是无符号整数。

php prettyprint-override">$table->unsignedBigInteger('id_stays_abroad')->nullable();
$table->unsignedBigInteger('user_id')->nullable();
 类似资料:
  • 我创建了一个名为用户的表。有一些表被称为公司、名称、部门。我想添加company_id,designation_id,department_id列到用户表作为外键。 我试过了,但没用 当我迁移迁移时,它会显示此错误。 Illumb\Database\QueryException:SQLSTATE[HY000]:一般错误:1005无法创建表(错误号:150“外键约束格式不正确”)(SQL:alter

  • 我正在尝试在Laravel中创建外键,但是当我使用迁移表时,出现以下错误: 我的迁移代码如下: 优先级迁移文件 用户迁移文件 任何关于我做错了什么的想法,我现在就想知道,因为我有很多表需要创建,例如用户、客户、项目、任务、状态、优先级、类型、团队。理想情况下,我希望创建使用外键保存此数据的表,即和等。 希望有人能帮助我开始。

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

  • 我有多个迁移,但我认为与这个问题相关的两个迁移是“作业”和“会话”迁移。 作业迁移

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

  • 我正在尝试为表创建迁移。此表有两个表的外键约束:和。 orders表的架构: employees表的架构: 客户端表的架构: 运行迁移时,已成功为clients表创建约束,但由于某些原因,在尝试为员工创建约束时出现错误: [Illumb\Database\QueryException]SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter tableadd cons