使用 Laravel 的 foreignIdFor 方法并创建复合唯一键
Posted
技术标签:
【中文标题】使用 Laravel 的 foreignIdFor 方法并创建复合唯一键【英文标题】:Using Laravel's foreignIdFor method and create a composite unique key 【发布时间】:2021-11-22 17:11:38 【问题描述】:按照下面的语法,我可以根据name
和bakery_id
字段轻松创建复合唯一键:
Schema::create('product_categories', function (Blueprint $table)
$table->id();
$table->foreignId('bakery_id')->constrained();
$table->string('name', 30);
$table->boolean('enabled')->default(true);
$table->timestamps();
$table->unique(['bakery_id', 'name']);
);
当我使用“foreignIdFor()
”方法而不是“foreignId()
”时,有没有办法以编程方式确定列的名称?
Schema::create('product_categories', function (Blueprint $table)
$table->id();
$table->foreignIdFor(Bakery::class)->constrained();
$table->string('name', 30);
$table->boolean('enabled')->default(true);
$table->timestamps();
$table->unique(['???', 'name']);
);
【问题讨论】:
【参考方案1】:只需要捕获列定义并使用它:
Schema::create('product_categories', function (Blueprint $table)
$table->id();
$colDef = $table->foreignIdFor(Bakery::class)->constrained();
$table->string('name', 30);
$table->boolean('enabled')->default(true);
$table->timestamps();
$table->unique([$colDef->name, 'name']);
);
【讨论】:
你不能用$colDef->name
吗?此外,不值得单独回答,但(new Bakery)->getForeignKey()
也可以。
@miken32 清理了属性【参考方案2】:
我不明白你的问题,但也许这可能会有所帮助
Schema::create('product_categories', function (Blueprint $table)
$table->id();
// $table->foreignIdFor(Bakery::class)->constrained();
$table->unsignedInteger('bakery_id')->nullable();
$table->foreign('bakery_id')->references('id')->on('bake')->onDelete('cascade');
$table->string('name', 30);
$table->boolean('enabled')->default(true);
$table->timestamps();
$table->unique(['bakery_id', 'name']);
);
【讨论】:
以上是关于使用 Laravel 的 foreignIdFor 方法并创建复合唯一键的主要内容,如果未能解决你的问题,请参考以下文章
Laravel + React,使用 Laravel 身份验证的 api