Отсоедините определенные связанные данные с помощью сопоставления

#cakephp #cakephp-4.x

Вопрос:

У меня есть две таблицы Users , Jobs соединенные вместе с помощью соединительной таблицы User_Jobs . Я пытаюсь удалить Users с работы всех, кто относится к типу «ЗАИНТЕРЕСОВАННАЯ сторона».

Один и тот же пользователь может быть сохранен на соединении с помощью другого типа (см. Пользователь 161 ).

 Table User_Jobs

| job_id| user_id  | type        |
|-------|----------|-------------|
| 11    | 160      | STAKEHOLDER |
| 11    | 161      | STAKEHOLDER |
| 11    | 161      | DESIGNER    | 

 

Следующий код непреднамеренно удаляет ВСЕХ пользователей, ВКЛЮЧАЯ «ДИЗАЙНЕРА».

 // Inside Jobs Table

 $users = $this->Users->find()
     ->matching('UserJobs', function ($q) use ($jobId, $stakeholders) {
           return $q
               ->where(['type' => 'STAKEHOLDER'])
               ->where(['job_id' => $jobId])
               ->where(['user_id IN' => $stakeholders]);
      })
     ->toList();
$this->Users->unlink($job, $users, [
    'associated' => 'Users',
    'atomic' => false
]);
 

Я знаю, что это связано с тем, что matching функция возвращает отфильтрованных пользователей, а не ассоциации. Однако правильно ли удалять belongsToMany ассоциации, основанные на _joinData ?

Спасибо