В общем ситуация такая: в базу нужно загружать PDF-файлы (PS: загружать в базу не сами файлы, а записи с информацией о их местоположении на сайте), чтобы люди их потом скачивали/смотрели в браузере.
Атрибуты модели:
return [
'id' => 'ID',
'issue_date' => 'Дата выпуска',
'issue_num' => 'Номер газеты',
'year_num' => 'Номер в году',
'path' => 'Ссылка на файл',
'size' => 'Размер файла',
'created_by' => 'Создано',
'updated_by' => 'Обновлено',
'created_at' => 'Дата создания',
'updated_at' => 'Дата обновления',
'view_count' => 'Количество просмотров',
'download_count' => 'Количество скачиваний',
'is_active' => 'Активность',
];
Сразу скажу, что все работает безупречно за исключением одного проблемного места. Файлы загружаются в форму через dropzone, и складываются во временную папку /tmp. Заполняется форма с остальными данными и при сохранении записи файл нужно переместить в подпапку по ID записи: /userdata/pdfs/XXXX (ну, вы знаете как это бывает).
Для редактирования - все понятно, все работает как часы. Но как быть при добавлении новой записи? Ведь ID еще неизвестен, а потому мы не может создать такую папку!
"Хорошо" - подумал я, и решил перемещать временный файл в методе afterSave. Но тогда после перемещения мне нужно изменить адрес файла в базе, тогда afterSave дергается опять, и опять, и опять?!
С загрузкой изображений в отдельную таблицу базы данных - не проблема. А как быть, если файл нужно держать вместе с записью?