Таблица file_usage
Таблица file_usage является ключевым компонентом системы управления файлами Drupal. Она служит для учета связей между файлами (хранящимися в таблице file_managed) и сущностями, которые их используют (ноды, пользователи, таксономия и т.д.).
Основная цель этой таблицы - предотвратить удаление файлов, которые все еще используются на сайте, и обеспечить корректное обновление счетчиков использования.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
fid |
int |
Идентификатор файла. Внешний ключ, ссылается на file_managed.fid.
|
module |
varchar(255) |
Название модуля, который использует файл (например: node, user, editor).
|
type |
varchar(64) |
Тип сущности, которая использует файл (например: node, user, taxonomy_term).
|
id |
varchar(64) |
Идентификатор сущности, которая использует файл. Соответствует ID сущности в её основной таблице. |
count |
int |
Количество использований файла данной сущностью. Увеличивается при добавлении файла и уменьшается при его удалении. |
Как это работает
Когда модуль использует файл (например, при загрузке изображения в тело статьи), он вызывает функцию file_usage->add(). Эта функция добавляет или обновляет запись в таблице file_usage, увеличивая счетчик count.
При удалении сущности (например, ноды) или удалении файла из содержимого, модуль вызывает file_usage->delete(), что уменьшает счетчик. Когда счетчик для конкретного файла достигает нуля по всем модулям, файл считается неиспользуемым и может быть удален в процессе кронирования (если включена соответствующая настройка).
Система предотвращает удаление файлов, которые все еще имеют положительные значения счетчиков в этой таблице, что защищает от "битых" ссылок на изображения и другие медиафайлы.
Комбинация полей module, type и id однозначно идентифицирует "потребителя" файла, а поле fid идентифицирует сам "потребляемый" файл.
Пример SQL-запроса
Получить информацию об использовании файла с ID 42:
SELECT u.*, f.filename, f.uri
FROM file_usage u
JOIN file_managed f ON u.fid = f.fid
WHERE u.fid = 42;
Найти все неиспользуемые файлы (кандидаты на удаление):
SELECT f.*
FROM file_managed f
LEFT JOIN file_usage u ON f.fid = u.fid
WHERE u.fid IS NULL OR u.count = 0;
Смотрите также
-
таблицу
file_managed,
которая хранит основную информацию о файлах -
таблицу
node,
которая хранит материалы сайта -
таблицу
users,
которая хранит данные пользователей -
таблицу
taxonomy_term_data,
которая хранит термины таксономии