У меня есть отношение многие ко многим между Пользовательской и Ролевой моделями.
Я хочу сохранять историю (ведение журнала) в моей базе данных каждый раз, когда я присоединяю или отсоединяю пользователя к роли.
$role->users()->attach(...);
Поскольку Laravel не может запускать события модели по умолчанию в сводных таблицах, я обнаружил, что должен был создать свою собственную пользовательскую сводную модель. Итак, вот что я сделал до сих пор:
внутри ролевой модели:
public function users(): MorphToMany
{
return $this
->morphedByMany(...)
->using(\App\Pivot\RolePivot::class) // <---------- NOTICE THIS
->withTimestamps();
}
внутри модели RolePivot:
class RolePivot extends MorphPivot
{
use RecordsModelHistory;
}
внутри моей черты RecordsModelHistory:
protected static function bootRecordsModelHistory()
{
static::historisableModelEvents()->each(function ($event) {
return static::$event(function (Model $model) use ($event) {
/** @var self $model */
if($event==='deleted'){dd($model);} // <---------- NOTICE THIS
if (! $model->shouldRecordModelHistory($event)) {
return;
}
$model->saveModelHistory($event);
});
});
}
dd($model)
выполняется, когда я выполняю $role->users()->detach(...);
. Пока все хорошо, поскольку отсоединение пользователя действительно означает удаление строки из сводной таблицы.
Моя проблема заключается в следующем: $model->attributes
не содержит всех атрибутов, которые я ожидал увидеть.
У меня есть только role_id
и model_id
: https://i.imgur.com/17Q3gTk.png
, хотя в моей сводной таблице model_has_roles
есть столбцы model_type
, model_id
, role_id
, created_at
, updated_at
: https://i.imgur.com/cx0VA8B.png
Почему он возвращает только role_id
и model_id
, тогда как я ожидаю еще +3 атрибута?
Как ни странно, я успешно получаю все 5 атрибутов (5 столбцов сводной таблицы) при присоединении (событие = created
), но только 3 атрибута при отсоединении (событие = deleted
)