如何使用 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']);
});