#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);