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”?还可能吗?
示例-您可以在 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');
});
我正在使用 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');