#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
?
Спасибо