在 laravel 迁移中更改主 ID

Posted

技术标签:

【中文标题】在 laravel 迁移中更改主 ID【英文标题】:Change Primary ID in laravel Migration 【发布时间】:2021-01-31 16:53:03 【问题描述】:

我正在创建一个表,我想使用该表“menu_items”中的 ID 添加到另一个表中

表一:menu_items

Schema::create('menu_items', function (Blueprint $table) 
    $table->id('menu_level_item_id');
    $table->timestamps();
    $table->string('menu_item_name');
    $table->string('menu_item_desc');

表 2 产品

Schema::create('products', function (Blueprint $table) 
            $table->id();
            $table->string('product_name');
            $table->string('product_desc');
            $table->integer('price');
            $table->integer('menu_level_item_id');
            $table->timestamps();
        );

我这样做的目的是我可以在这两个表之间创建关系,因为它们具有相同的键?

我可以采取不同的方法吗?我应该在创建菜单项时创建一个唯一键,然后将其添加到第二个表中吗?

谢谢。

【问题讨论】:

您不需要在两个表上创建相同的键。如果您希望也可以创建相同的密钥。假设您有一张表users,其中一张是products。一个用户有很多产品,所以在products 表上,您可以定义与users 表的关系。此密钥可以是user_id 或任何内容。 这可能不是期望 laravel 为您创建关系的正确方法,因为您必须在两个表的 laravel 模型中定义关系并传递正确的列名来连接它们。跨度> 【参考方案1】:

基本上 Laravel Eloquent 进行密钥处理。当您有两个表都以名称 id 作为键时,这不是问题。像这样命名关系表中的键

table1_id
table2_id 

Laravel 会在 Eloquent 中处理这个问题。您还可以将关系表中的两列命名为您想要的任何名称。您可以为 Eloquent 中的关系定义它。例如

public function otherModel () 
    return $this->belongsToMany('App\Models\OtherModel', 'table_name', 'this_model_id', 'other_model_id');

请查看: Laravel Relationship Documentation

【讨论】:

【参考方案2】:
Schema::create('menu_items', function (Blueprint $table) 
    $table->id();
    $table->timestamps();
    $table->string('menu_item_name');
    $table->string('menu_item_desc');
    table->timestamp();
  );


Schema::create('products', function (Blueprint $table) 
        $table->id();
        $table->string('product_name');
        $table->string('product_desc');
        $table->integer('price');
        $table->unsignedBigInteger('menu_level_item_id');
        $table->timestamps();
        $table->foreign('menu_level_item_id')->references('id')->on('menu_items');
    );

【讨论】:

以上是关于在 laravel 迁移中更改主 ID的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 迁移中更改日期格式

使用 Laravel,您可以在迁移过程中更改列名吗?

在 Laravel 迁移中更改列类型的最佳方法是啥?

如何在测试 laravel 中更改迁移中的枚举类型列

在 Laravel 迁移中更改列会导致异常:更改表的列需要 Doctrine DBAL

Laravel 迁移更改表名