如何为 2 列添加唯一键:employee_id 并且只有日期列中的月份和年份

How to add unique key for 2 columns : employee_id and only month and year from the date column

我有一个 table,其中包含所有员工的详细信息。我想让 employee_id 和 date_of_salary 中的唯一月份和年份在 table 上唯一。该特定员工 ID 和 month/year 应该只存在一行。 date_of_salary 是日期数据类型的列。

我尝试使用以下内容,但这适用于员工 ID 和完成日期。同一个月需要多个条目。

$table->unique(['employee_id', 'date_of_salary']);

这是我完成的迁移函数

public function up()
{
    Schema::create('employee_salary_details', function (Blueprint $table) {
        $table->increments('id');

        $table->unsignedInteger('employee_id')->required();
        $table->date('date_of_salary')->required();

        $table->foreign('employee_id')
              ->references('id')
              ->on('employees')
              ->onDelete('restrict');

        $table->unique(['employee_id', 'date_of_salary']);

        $table->timestamps();
    });
}

对于员工和薪水,每一行都应该是唯一的 month/year。因为工资一个月只能发一次,但是可以在任何一天发。

->unique() 表示例如 date_of_salary 列具有唯一日期。所以你不能多次添加'2018-12-21',在整个列中只添加一次。

我认为你需要 ->primary(['employee_id', 'date_of_salary']),如果你想要多列的唯一行。

| employee_id | date_of_salary |
+-------------+----------------|
| 1           | 2018-11-21     | <- OK
| 1           | 2018-12-21     | <- OK
| 2           | 2018-12-21     | <- OK
| 1           | 2018-12-21     | <- Not possible

在数据库中为日、月和年创建了 3 个不同的字段。将 employee_id、月份和年份设为具有 3 个列名称的唯一键。