В частности в документации Laravel
приводится пример $path = $request->file('avatar')->store('avatars');
где говорится что потом можно сохранить путь файла в базе данных,
Но как правильнее будет , хранить путь к файлу или только название файла, и как понять в каком случае что использовать ?
Давайте скажу свою практику, а вы там сами определите, что и на сколько подходит под ваше приложение и под идеалогию ларавела. Возможно просто расскажу свой метод который является одним из подходов при работе с файлами.
Путь к картинке делится на 3 части, условно можно обозначить так:
директория/каталоги/имя файла
Пример:
/uploads/avatars/2018/10/20/a_mine.jpg, где:
директория - /uploads/avatars/
каталоги - 2018/10/20/
имя файла - a_mine.jpg
Смысл директории - это разделить вложения по смыслу, например: аватарки, для новостей, для блога, для рекламы, какие-то системные файлы и т.д.
Смысл каталогов - как-то рассортировать файлы, чтобы в одной папке не было много файлов, ибо если у нас в папке будет 10к картинок, то запрос на получение - будет долгим. (P.S. Есть какие-то лимиты, сколько рекомендуется хранить файлов, я не вспомню точно, если будет интересно - загуглите, но там не так уж и много).
Смысл имени файла - последний этап при идентификации файла. Думаю тут все понятно :)
Что и как хранить:
Директорию в базе хранить не стоит, это константа она у вас в проекте где-то должна быть задана, условно, эта константа представляет собой массив, где ключ - алиас директории, а значение - путь. Ну наглядно:
[
'avatars' => '/uploads/avatars/',
'blog' => '/uploads/blog/',
'news' => '/uploads/news/',
'attach' => '/uploads/attach/'
]
Максимум что вы можете хранить в таблице, это название алиаса, чтобы понимать к чему принадлежит файл и только в том случае, если у вас в таблице файлы из нескольких директорий (что логично). Например: общая таблица где все файлы из всех директорий.
Вот с каталогами и именем другая басня. Их конечно стоит хранить в таблице, но хранить стоит отдельно друг от друга. Может в БД и больше места занимать будет (но на дворе 2к18, с памятью на винте проблем нет), а в замен вы получите более гибкий инструмент для работы с этими файлами.
P.S. Стоит ли хранить расширения файлов? А вот тут уже спорный вопрос. Зависит от целей, если будет какой-то фильтр для фильтрации по типу - возможно и стоит добавить если у вас очень очень много файлов. Если нет, то на php есть функция для получения расширения файла, а со стороны бд, поиск можно осуществлять и штатными средствами. В любом случае если вы не храните расширение, в любой момент добавить эту возможность - не проблема.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости