Laravel 8 使用foreignId()自定义外文名称

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

Laravel 7 引入了使用函数

foreignId
定义外键的较短版本,但我找不到为该外来 ID 提供自定义名称的选项。

以“旧”方式,我们会写:

$table->unsignedBigInteger('user_id');
$table->foreign('user_id', 'custom_foreign_key_name')->references('id')->on('users');

新方式:

$table->foreignId('user_id')->constrained();

但是如何以新的方式提供“custom_foreign_key_name”?还可能吗?

laravel-7
2个回答
4
投票

示例-您可以在 constrained() 中添加表名称:

public function up()
{
    Schema::create('tutor_payouts', function (Blueprint $table) {
        $table->id();
        $table->foreignId('tutor_id')->constrained('users');
        $table->foreignId('fee_id')->constrained();
        $table->dateTime('payout_date');
        $table->double('payout_amount', 8, 2);
        $table->timestamps();
    });
}

参考:[https://laravel.com/docs/9.x/migrations#foreign-key-constraints][1]

如果您的表名称与 Laravel 的约定不匹配,您可以通过将其作为参数传递给约束方法来指定表名称:

Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained('users');
});

0
投票

我正在使用 Laravel 11。我尝试过:

$table->foreignId('rock_paper_scissors_event_id')->constrained()->cascadeOnDelete();

但是,它不起作用,因为自动生成的标识符

rock_paper_scissors_event_user_rock_paper_scissors_event_id_foreign
超过了 64 个字符。

解决方案是使用

index()
方法放置自定义标识符名称:

$table->foreignId('rock_paper_scissors_event_id')->constrained()->cascadeOnDelete()->index('rps_event_user_rps_event_id_fk');
© www.soinside.com 2019 - 2024. All rights reserved.