Динамическое отношение morphToMany через макрос - PullRequest
0 голосов
/ 11 апреля 2019

Я хочу динамически добавить связь morphToMany между моделями (например, Пользователь, Вложение, ...) и Файловой моделью, основанной на Файловом пакете.ServiceProvider должен построить отношение.

Как мне это сделать?

PHP:

$fileables = config('topredmedia-filemanager.fileable');

foreach ((array)$fileables as $modelType) {
  if (class_exists($modelType)) {
    $model = App::makeWith($modelType);

    // Add Relation to all specified models in config
    Builder::macro('files', function () use ($model) {
      return $model->morphToMany(File::class, 'fileable', 'trm_fileables');
    });
  }
}

Когда я запускаю этот код, но с отношением morphMany, все работает нормально.

Когда я выполняю $model->files()->sync([1, 2, 3]) в контроллере, сводная таблица (file_id, fileable_id, fileable_type) должна быть заполнена правильными данными, но при запуске я получаю следующую ошибку:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'fileable_id' cannot be null (SQL: insert into <code>trm_fileables (file_id, fileable_id, fileable_type) значения (3,, Путь \ К \ Модель \ Пользователь))

...