laravel 迁移中小整数的外键

问题描述 投票:0回答:1

我有一个名为“平台”的表,如下所示

      Schema::create('platforms', function (Blueprint $table) {
            $table->tinyIncrements('id');
            $table->string('name', 100)->unique();

            $table->softDeletes();
            $table->timestamps();
        });

以及其他表访问,例如

        Schema::create('visits', function (Blueprint $table) {
            $table->id();
            $table->foreignId('platform_id')->nullable()->constrained('platforms')->restrictOnDelete()->restrictOnUpdate();
            // ...
            $table->timestamps();
        });

我无法从访问表到平台表创建外键,因为 Laravel 中的 foregnId 函数将类型设置为 bigInteger

    public function foreignId($column)
    {
        return $this->addColumnDefinition(new ForeignIdColumnDefinition($this, [
            'type' => 'bigInteger',
            'name' => $column,
            'autoIncrement' => false,
            'unsigned' => true,
        ]));
    }

并得到

一般错误:1005无法创建表

panel
visits
(errno:150“外键约束格式不正确”)(连接:mysql,SQL:alter table
visits
添加约束
visits_platform_id_foreign
外键(
platform_id
)参考
platforms
id
)关于删除限制关于更新限制)错误

我应该怎样做才能让它发生?

php laravel migration
1个回答
0
投票

自己手动声明列,然后添加 FK 约束,因为

foreignId
强制它成为文档中提到的 unsignedBigInteger。

片段:

<?php

Schema::create('visits', function (Blueprint $table) {
    $table->id();
    $table->unsignedTinyInteger('platform_id')->nullable();
     $table->foreign('platform_id')->references('id')->on('platforms')->restrictOnDelete()->restrictOnUpdate();
    // ...
    $table->timestamps();
});
© www.soinside.com 2019 - 2024. All rights reserved.