Как лучше ассоциировать модель и файлы/изображения относящиеся к ней?
Загрузка файлов на сервер реализована через отдельный контроллер, при сохранении файла на диск создаётся соответствующая запись в таблице "files" с указанием основных параметров файла, включая указанный вручную заголовок.
При создании определённой модели, к примеру, товара, необходимо загрузить файл на сервер, записать в базу и каким-то образом ассоциировать этот файл с создаваемой моделью товара.
Как лучше это сделать?
Пока что вижу три варианта:
- при создании товара в базе создавать пустую запись с null`ёвыми данными, таким образом файл можно сразу привязать к ID модели. Файлы и модели связывать через связующую таблицу.
- ID файлов писать в аттрибут модели (json_encoded или просто через запятую) и при выборке делать дополнительный запрос на получение файлов по ID.
- загружать файлы, в ответе получать ID записей с данными о файлах, инициировать сохранение модели товара, получать ID, с которым будет сохранён товар и в связующей таблице между files и goods обновлять model_id на соответствующий ID, с которым модель будет сохранена.
На мой взгляд лучше всего подойдет связующая таблица. И не нужно создавать запись с null при сохранении модели, на тот случай если у модели не будет прикрепленного файла, что бы не плодить пустые записи в БД.
И создать индексы для всех таблиц и внешние ключи для resource_file.resource_id и resource_file.file_id.
Таким образом вы сможете, например, сохранять несколько файлов для одной модели. А если правильно настроить связи с каскадным удалением, то можно переложить эту логику на БД, что бы не чистить базу вручную после удаления записи модели.