在 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的主要内容,如果未能解决你的问题,请参考以下文章