如何使用 laravel 迁移在一个 table 中创建两个主键?
How to create two primary keys in one table using laravel migration?
我想在这个迁移中定义02个主键,也需要在模型中定义它们class。我正在使用 laravel 9 版本。当我定义这个。它给出了以下错误。
Schema::create('salaries', function (Blueprint $table) {
$table->increments('id')->primary();
$table->unsignedInteger('emp_no')->primary();
$table->foreign('emp_no')->references('id')->on('employees')->cascadeOnDelete()->cascadeOnUpdate();
$table->integer('salary');
$table->date('from_date')->primary();
$table->date('to_date');
$table->timestamps();
});
输出
SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary key defined (SQL
: alter table `titles` add primary key `titles_id_primary`(`id`))
尝试使用复合主键
Schema::create('salaries', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('emp_no');
$table->foreign('emp_no')->references('id')->on('employees')->cascadeOnDelete()->cascadeOnUpdate();
$table->integer('salary');
$table->date('from_date');
$table->date('to_date');
$table->timestamps();
$table->primary(['id','emp_no','from_date']);
});
或者,如果适合您,您可以将必要的字段设为唯一
试试这个,这是我的例子:
Schema::create("kitchen", function($table) {
$table->increments('id');
$table->integer('restaurant_id');
$table->string('name');
$table->unique(['restaurant_id', 'name']);
});
我想在这个迁移中定义02个主键,也需要在模型中定义它们class。我正在使用 laravel 9 版本。当我定义这个。它给出了以下错误。
Schema::create('salaries', function (Blueprint $table) {
$table->increments('id')->primary();
$table->unsignedInteger('emp_no')->primary();
$table->foreign('emp_no')->references('id')->on('employees')->cascadeOnDelete()->cascadeOnUpdate();
$table->integer('salary');
$table->date('from_date')->primary();
$table->date('to_date');
$table->timestamps();
});
输出
SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary key defined (SQL
: alter table `titles` add primary key `titles_id_primary`(`id`))
尝试使用复合主键
Schema::create('salaries', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('emp_no');
$table->foreign('emp_no')->references('id')->on('employees')->cascadeOnDelete()->cascadeOnUpdate();
$table->integer('salary');
$table->date('from_date');
$table->date('to_date');
$table->timestamps();
$table->primary(['id','emp_no','from_date']);
});
或者,如果适合您,您可以将必要的字段设为唯一
试试这个,这是我的例子:
Schema::create("kitchen", function($table) {
$table->increments('id');
$table->integer('restaurant_id');
$table->string('name');
$table->unique(['restaurant_id', 'name']);
});