Удаленный метод в наблюдателе не вызывается при синхронизации сводного массива

#php #laravel #pivot-table #relationship #observers

Вопрос:

У меня есть две таблицы Содержимого и языков и Языки содержимого сводной таблицы. Когда я редактирую содержимое, прикрепляя идентификаторы языков, я использовал sync() (у него есть идентификатор и сводный столбец в $syncData). Кроме того, имейте сервер ContentLanguageObserver для запуска некоторых событий при создании и удалении событий. Но created при синхронизации() вызывается только событие, а deleted метод никогда не вызывается при удалении значения из содержимого, но база данных обновляется.

У меня также есть несколько других связанных полей, они отлично работают с обоими событиями, так как у них нет сводного массива для обновления при синхронизации().

Рабочие отношения в моей базе кода:

App/Content.php

  public function genres(){

    return $this->belongsToMany(Genre::class, 'content_genres')->using('AppContentGenre')->withTimestamps();
}
 

Функция синхронизации ContentService.php , где $жанры-это только массив идентификаторов, это срабатывает created и deleted в ContentGenreObserver.php

   $content->genres()->sync($genres);
 

Проблема с языками:

 public function audioLanguage() {
    
    return $this->belongsToMany(Language::class, 'content_languages')->select('languages.id','languages.english_name')->wherePivot('language_type', '=', Language::AudioLanguage)->using(ContentLanguage::class)->withTimestamps();
}
 

Функция синхронизации ContentService.php , где $syncData представляет собой массив идентификаторов и сводный столбец, срабатывает только created , но не deleted в ContentLanguageObserver.php

  $content->audioLanguage()->sync($syncData);