class ProjectEmployees extends Migration
{
public function up()
{
// employees assigned to each project
Schema::create('project_employees', function (Blueprint $table) {
$table->integer("project_id")->unsigned();
$table->integer("employee_id")->unsigned();
$table->tinyInteger("is_project_leader")->unsigned()->default(0);
$table->tinyInteger("is_manager")->unsigned()->default(0);
});
Schema::table('project_employees', function($table) {
$table->primary(['project_id', 'employee_id']);
// FK
$table->foreign('employee_id')->references('id')->on('employees');
$table->foreign('project_id')->references('id')->on('projects');
});
}
}
У меня есть модель для проектов и другая для сотрудников.Я хочу иметь возможность назначать сотрудников руководителями и руководителями проектов.У меня есть этот метод:
function assignProjectLeaders($project, $employees)
{
$syncData = $this->addPivotValue($employees, ['is_project_leader' => true]);
$project->projectLeaders()->sync($syncData);
}
function addPivotValue($items, $pivotValues): array
{
$pivotData = array_fill(0, count($items), $pivotValues);
$syncData = array_combine($items, $pivotData);
return $syncData;
}
Поэтому я хочу, чтобы метод assignProjectLeaders устанавливал указанных сотрудников в качестве лидеров проекта для данного объекта проекта.Однако, если сотрудник уже связан с проектом в качестве менеджера проекта, это не сработает из-за ограничения первичного ключа (похоже, он пытается снова вставить пару (проект, сотрудник) вместо простого обновления столбца is_project_leader до 1).